包含静态库,但符号未解析

时间:2017-08-07 13:25:45

标签: makefile autoconf automake

在automake下,我有一个第三方静态库和一个我在其上构建的静态库,我想在与我的库静态链接的可执行文件中使用它:

libthird.a, libmy.a, progs...

我正在使用(Makefile.am)编译libmy.a:

noinst_LIBRARIES = libmy.a
...sources...
libmy_a_LIBADD = libthird.a

当我编译并链接调用libmy函数的prog时,它拒绝链接,在libmy使用的所有libthird符号上给出未解决的错误。

试一试,我换了

libmy_a_LIBADD = libthird.a

libmy_a_LIBADD = $(LIB_THIRD_OBJS)

即。显式构造libthird.a的目标文件,并且它可以工作。我在第一种情况下做错了什么? libmy.a在第一种情况下包含libthird.a(即less libmy.a显示目标文件和libthird.a)

另外一次尝试,我在libmy.a上运行ar,将它运送到libthird.a,生成libmyA.a,并且也可以正常工作:与libmyA.a链接的prog已正确解析了libthird符号。< / p>

或者甚至不可能,因为(我认为)在这里解释:Embed all external references when creating a static library

1 个答案:

答案 0 :(得分:0)

为什么不:

prog_LDADD = libmy.a libthird.a

你也应该省略:

libmy_a_LIBADD = libthird.a

在这种情况下,因为libmy.a是一个静态便利库,所以没有必要进一步链接它。