我有一个使用libtool 编译成两个对象的库(libfoo):libfoo.a和libfoo.so。
我还必须使用libtool 创建,另一个库(libbar),它将是包含所有libfoo代码的单个共享库(libbar.so)。
为此,我必须强制libbar链接到 libfoo.a ,而不是libfoo.so。
我处于自动工具环境中,因此必须使用标准configure.in或Makefile.am规则解决此问题。
我尝试了几件事,例如在configure.in中:LDFLAGS="$LDFLAGS "-Wl,-Bstatic -lfoo -Wl,-Bdynamic"
这总是在链接行上产生-Wl标志;但-lfoo已消失,并已以绝对路径形式(/opt/foo/lib/libfoo.so)放在其开头。
我也尝试过:LDFLAGS="$LDFLAGS "-L/opt/foo/lib libfoo.a"
或在Makefile.am中:libbar_la_LDADD = -Wl,-Bstatic -lfoo -Wl,-Bdynamic
和libbar_la_LTLIBRARIES = libfoo.a
等等等等(有很多变种!)
但是我认为我绝对不了解Autotools/Libtool的知识,无法独自解决这个问题。我一直无法在网上找到有关此问题的信息,而问题总是略有不同。
最佳答案
您可能会使用convenience library。便利库是未安装的中间静态库。您可以使用前缀noinst
来构建一个。
noinst_LTLIBRARIES = libfoo_impl.la
lib_LTLIBRARIES = libfoo.la libbar.la
libfoo_la_LIBADD = libfoo_impl.la
libbar_la_LIBADD = libfoo_impl.la