诡异现象:Golang的go build命令忽略依赖库名称变更
诡异现象:Golang的go build命令忽略依赖库名称变更 大家好!
这真的很奇怪,我在cgo导入中重命名了一个依赖库,然后用 go build 重新构建,但事实是打包后的程序仍然导入旧的库(使用旧名称)。
以下是导入C库的部分代码:
/*
#cgo CFLAGS: -I.
#cgo LDFLAGS: -L . -lmarket65 -lthostmduserapi_se
#include "dll.h"
*/
import "C"
lmarket65 原来的名称是 lmarket_n。我已经将默认共享库目录 /usr/lib/ 中的 libmarket_n.so 复制为 libmarket65.so。
然后我使用了命令:
go clean -cache
go build
并生成了新的 TestMarket 可执行文件。
接着检查它调用了哪些库:
~/src/TestMarket$ ldd TestMarket
linux-vdso.so.1 (0x00007fff924e2000)
libmarket_n.so => /usr/lib/libmarket_n.so (0x00007ffb92a1e000)
libthostmduserapi_se.so => /usr/lib/libthostmduserapi_se.so (0x00007ffb9210f000)
libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007ffb920ec000)
libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007ffb91efa000)
libstdc++.so.6 => /usr/lib/x86_64-linux-gnu/libstdc++.so.6 (0x00007ffb91d19000)
libgcc_s.so.1 => /lib/x86_64-linux-gnu/libgcc_s.so.1 (0x00007ffb91cfe000)
/lib64/ld-linux-x86-64.so.2 (0x00007ffb92af1000)
librt.so.1 => /lib/x86_64-linux-gnu/librt.so.1 (0x00007ffb91cf1000)
libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007ffb91ceb000)
libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007ffb91b9c000)
看,它并不依赖于新的库 libmarket65.so,而是依赖于旧的 libmarket_n.so,而这个旧库在go文件中根本没有被引用!
更多关于诡异现象:Golang的go build命令忽略依赖库名称变更的实战教程也可以访问 https://www.itying.com/category-94-b0.html
3 回复
非常感谢!但目录中并没有这样的 mod 文件,这是没有此类目录管理的旧版本。
更多关于诡异现象:Golang的go build命令忽略依赖库名称变更的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html
这是否与 Go 模块缓存构建目录有关?我对模块一无所知,但你是否需要执行某些操作来刷新 go.mod(或者是 go.sum)文件?


