包含静态库,但符号未解析
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
是一个静态便利库,所以进一步链接它没有实际意义。
在 automake 下,我有一个第三方静态库和一个我在其上构建的静态库,我想在可执行文件中使用静态库 linked 和我的库:
libthird.a, libmy.a, progs...
我正在用 (Makefile.am):
编译 libmy.anoinst_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
是一个静态便利库,所以进一步链接它没有实际意义。