我有一个名为libfoo的库,使用libtool编译成两个对象:libfoo.a和libfoo.so。
我需要创建另一个库(libbar),也要使用libtool,它将是一个包含所有libfoo代码的单个共享库(libbar.so)。
为此,我必须强制libbar链接到libfoo.a,而不是使用libfoo.so。
我处在一个autotools环境中,所以我必须使用标准的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知识来独自解决这个问题。我在网上找不到相关信息,每次遇到的问题都略有不同。