【发布时间】:2012-06-06 06:17:28
【问题描述】:
我有一个库 (libfoo),它使用 libtool 编译成两个对象:libfoo.a 和 libfoo.so。
我还必须使用 libtool 创建另一个库 (libbar),它将是一个包含所有 libfoo 代码的共享库 (libbar.so)。
为此,我必须强制 libbar 链接到 libfoo.a,而不是 libfoo.so。
我在 autotools 环境中,所以我必须使用标准的 configure.in 或 Makefile.am 规则来解决这个问题。 p>
我尝试了几件事,例如在 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 知识来单独解决这个问题。我一直无法在网上找到有关它的信息,总是略有不同的问题。
【问题讨论】:
标签: static shared autotools libtool