我有一个库(libfoo),使用libtool编译成两个对象:libfoo.a和libfoo.so.
我还必须使用libtool创建另一个库(libbar),它将是一个包含所有libfoo代码的共享库(libbar.so).
为了做到这一点,我必须强制libbar链接libfoo.a,而不是libfoo.so.
我在autotools环境中,所以我必须使用标准的configure.in或Makefile.am规则来解决这个问题.
我试过几件事,比如configure.in:
LDFLAGS="$LDFLAGS "-Wl,-Bstatic -lfoo -Wl,-Bdynamic"
Run Code Online (Sandbox Code Playgroud)
这总是会在链接行上产生-Wl标志; 但是-lfoo已经消失了,并且在它的开头被放置在绝对路径形式(/opt/foo/lib/libfoo.so)中.
我也尝试过:
LDFLAGS="$LDFLAGS "-L/opt/foo/lib libfoo.a"
Run Code Online (Sandbox Code Playgroud)
或者在Makefile.am中:
libbar_la_LDADD = -Wl,-Bstatic -lfoo -Wl,-Bdynamic
Run Code Online (Sandbox Code Playgroud)
和
libbar_la_LTLIBRARIES = libfoo.a
Run Code Online (Sandbox Code Playgroud)
等等(有很多很多变种!)
但我认为我绝对不具备Autotools/Libtool足够的知识来解决这个问题.我无法在网上找到有关它的信息,总是略有不同的问题.