【问题标题】:Why changing #cgo LDFLAGS -l cannot change the imported library为什么更改#cgo LDFLAGS -l 不能更改导入的库
【发布时间】:2021-04-10 21:46:43
【问题描述】:

#cgo LDFLAGS: -lmarket_n 变成 #cgo LDFLAGS: -lmarket_m

然后 go clean -cache -r

go build -o newm

检查二进制 newm 调用的共享库

ldd newm

讽刺的是,它报告

libmarket_n.so => not found
...

我也将libmarket_n.so重命名为libmarket_m.so, 为什么一直引用文件已不存在的旧库名?

【问题讨论】:

    标签: cgo


    【解决方案1】:

    libmarket_n.so重命名为libmarket_m.so时出现问题

    此操作并未将库market_n 更改为库market_m,因为它的真实名称market_n 已印在其编译过程中。而go build发现它确实指的是旧名称并完成编译到newm

    但是,ldd 分析 newm 发现它指的是旧的库名,在库路径中没有对应的文件名。

    因此要么保留其原始名称,要么使用目标名称 market_m 重新编译库并生成真正的 Linux 共享对象(so)market_m

    【讨论】:

      猜你喜欢
      • 2018-12-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-06-21
      • 2017-09-20
      • 2012-10-17
      • 2016-03-10
      • 2017-08-04
      相关资源
      最近更新 更多