【问题标题】:Can I use libtool output in cgo?我可以在 cgo 中使用 libtool 输出吗?
【发布时间】:2023-03-21 08:35:01
【问题描述】:
我调用的是从 c++ 源代码编译的静态库。但是写依赖库很累,我发现libtool做得很好,例如,我的libfoo.la会有这样的东西:
dependency_libs=‘ /Users/roger/example/lib/bar/libbar.la -lm’
现在我在 golang 中调用libfoo.a,但是依赖关系可能很复杂。 libfoo.a取决于libbar.a,libbar.a 取决于libhaha.a。 我可以在构建 golang 时使用 libfoo.la 吗?(或者以某种方式将 libfoo.a 及其所有依赖项放入一个 lib 文件中?)
【问题讨论】:
标签:
go
static-libraries
dependency-management
libtool
【解决方案1】:
我在构建 golang 时可以使用 libfoo.la 吗?
没有。 Go 有自己的构建系统,它不知道 libtool 档案,只知道系统上可用的标准静态/共享库。
现在我在 golang 中调用 libfoo.a,但是依赖关系可能很复杂。
静态库就是这样。这是改用共享库的原因之一。共享库在 Go 中也不是没有问题的,但在某种程度上是易于管理的。
libfoo.a 依赖于 libbar.a ,libbar.a 依赖于 libhaha.a。
不是这样的:
package foo
// #cgo CFLAGS: -I...
// #cgo LDFLAGS: -L... -lfoo -lbar -lhaha -lm
// #include ...
import "C"
...
工作?
或者以某种方式将 libfoo.a 及其所有依赖项放入一个 lib 文件中?
是的,这是可能的,但另一个问题。