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

Static library included, but symbols unresolved

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

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

我正在用 (Makefile.am):

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

当我编译 link 一个调用 libmy 函数的程序时,它拒绝 link,在 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,效果也很好:progs linked with libmyA.a 正确解析了 libthird 符号。

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

为什么不呢:

prog_LDADD = libmy.a libthird.a

你还应该省略:

libmy_a_LIBADD = libthird.a

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