如何在golang中使用LDFLAGS的相对路径

我正在尝试构建一个使用静态库(.a 文件)的 golang 程序


我的项目的目录结构如下


└─testserver

    ├─bin

    ├─pkg

    └─src

        ├─logging

        └─testserver

            ├─libtest.a

            └─test.go

test.go 中 cgo 的标志如下


// #cgo LDFLAGS: -L /home/test/testserver/src/testserver -ltest

// #include "test.h"

import "C"

当我对 LDFLAGS -L 使用绝对路径时,它可以正常工作,但是当我将路径更改为相对路径时,例如


// #cgo LDFLAGS: -L ./testserver -ltest

然后运行命令


go install testserver

它向我返回一个错误,并说“找不到 -ltest”


我的问题是如何在 LDFLAGS 中使用相对路径?,以便我可以在任何路径中构建项目。


万千封印
浏览 197回答 2
2回答

侃侃尔雅

用${SRCDIR}解决相对路径的问题真的非常棒。另外,${SRCDIR}表示当前 go 文件的绝对路径。使用命令go build -x .检查输出。$ go build -x ....cd /root/sourcecode/src/tcp/aesCGO_LDFLAGS="-g" "-O2" "-L/root/sourcecode/src/tcp/aes/aes" "-laes" /usr/local/go/pkg/tool/linux_amd64/cgo -objdir $WORK/tcp/aes/_obj/ -importpath tcp/aes -- -I $WORK/tcp/aes/_obj/ aes.gocd $WORK...$ tcp/aes/usr/bin/ld: cannot find -laescollect2: error: ld returned 1 exit status这是错误的,因为 liblibaes.a与 go 文件的位置相同。然后我改变了它,并通过了。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go