【发布时间】:2016-10-12 08:33:07
【问题描述】:
我有一个与this question 非常相似的问题。我需要告诉链接器添加静态库,尽管似乎要引用它的符号。
原因是该库在 .init 中包含一个函数或使用 (__attribute__ ((constructor))) 来执行其初始化,这反过来将从主程序调用 register() 函数来注册其功能(读取: 传递其他函数指针)。
因此,尽管在主程序中似乎没有使用库中的符号,但一旦通过库 init 函数注册了库中的函数,主程序就会调用库中的函数。
但我正在使用 libtool... 因此,以前面提到的问题中给出的示例为例,我需要编写如下内容:
bin_PROGRAMS = pktanon
pktanon_SOURCES = main.cpp
pktanon_DEPENDENCIES = $(lib_LIBRARIES)
pktanon_LDADD = libpktanon.la $(LDADD)
注意 lib 的“la”扩展名而不是“a”。
现在,我应该如何将--whole-archive 选项传递给链接器? the question 中建议的答案假定存档的路径(.a 文件)是已知的......在 Makefile.am 中硬编码像 .libs/libptanon.a 这样的路径感觉不对......
如果尝试,链接器不喜欢在其整个存档选项中遇到.la 文件:
pktanon_LDFLAGS = -Wl,--whole-archive,libpktanon.la,--no-whole-archive
有什么建议吗?
【问题讨论】: