我在 docker 容器 ( golang:1.18-bullseye) 中運(yùn)行一個(gè) go 程序。我試過(guò)用go run main.go和運(yùn)行它go run .我的代碼看起來(lái)像這樣,兩個(gè)頭文件都位于IncludeCFLAGS 中給定的目錄中:/*#cgo LDFLAGS: -Lvendor/MyCoolLibrary/1.14.2/Bin/Linux/libSDK-Linux-Shipping.so#cgo CFLAGS: -I vendor/MyCoolLibrary/1.14.2/Include/#include "my_cool_sdk.h"#include "my_cool_logging.h"*/import "C"import ( "fmt" "log" "os" "runtime")func main() {ret := C.MyCoolFunc()}當(dāng)我運(yùn)行此代碼時(shí),我收到此錯(cuò)誤消息:/usr/bin/ld: $WORK/b001/_x002.o: in function `_cgo_6bb9bcf96ac6_Cfunc_MyCoolFunc':/tmp/go-build/cgo-gcc-prolog:110: undefined reference to `MyCoolFunc'我怎樣才能解決這個(gè)問(wèn)題?編輯:我將標(biāo)題更改為:/*#cgo LDFLAGS: -L${SRCDIR}/vendor/MyCoolLibrary/1.14.2/Bin/Linux/libSDK-Linux-Shipping.so -lSDK-Linux-Shipping#cgo CFLAGS: -I ${SRCDIR}/vendor/MyCoolLibrary/1.14.2/Include/#include "my_cool_sdk.h"#include "my_cool_logging.h"*/然后運(yùn)行g(shù)o build -x .,這是輸出:WORK=/tmp/go-build1175764972mkdir -p $WORK/b001/cd /home/helloworldTERM='dumb' CGO_LDFLAGS='"-g" "-O2" "-L/home/helloworld/vendor/MyCoolLibrary/1.14.2/Bin/Linux/libSDK-Linux-Shipping.so" "-lSDK-Linux-Shipping"' /usr/local/go/pkg/tool/linux_amd64/cgo -objdir $WORK/b001/ -importpath go-sandbox -- -I $WORK/b001/ -g -O2 -I ./vendor/MyCoolLibrary/1.14.2/Include/ ./main.gocd $WORKgcc -fno-caret-diagnostics -c -x c - -o /dev/null || truegcc -Qunused-arguments -c -x c - -o /dev/null || truegcc -fdebug-prefix-map=a=b -c -x c - -o /dev/null || truegcc -gno-record-gcc-switches -c -x c - -o /dev/null || truecd $WORK/b001
1 回答

jeck貓
TA貢獻(xiàn)1909條經(jīng)驗(yàn) 獲得超7個(gè)贊
我能夠重現(xiàn)并修復(fù)這個(gè)問(wèn)題。還有一些額外的問(wèn)題。從專(zhuān)注于跑步開(kāi)始go build
:
好的所以 go 編譯器找到了頭文件,但是找不到共享庫(kù)。我認(rèn)為您稍微修改了問(wèn)題的代碼,這不是問(wèn)題,但-L
in的路徑LDFLAGS
必須是:
相對(duì)于源目錄使用
${SRCDIR}
絕對(duì)路徑
完全避免這種情況并利用 pkg-config 我只是使用包含
so
文件的相對(duì)目錄作為-L
.
好的,除此之外,您還必須-l
在 LDFLAGS 中給出一個(gè)參數(shù),以在您指向的路徑中找到文件(即:libvendera.so
需要-lvendora
)。
一旦go build
工作,您的應(yīng)用程序仍然需要知道文件的so
運(yùn)行位置(因此是共享庫(kù))。為此,您可能需要設(shè)置LD_LIBRARY_PATH
并指向包含so
文件的目錄,就像您對(duì)-L
.
- 1 回答
- 0 關(guān)注
- 135 瀏覽
添加回答
舉報(bào)
0/150
提交
取消