我遇到的问题与this question非常相似。我需要告诉链接器添加静态库,尽管事实上似乎要引用它的符号。
原因是该库包含.init
中的函数或使用(__attribute__ ((constructor))
)执行其初始化的函数,而该函数又将从主程序调用register()函数进行注册它的功能(读取:传递其他函数指针)。
因此,尽管主程序中似乎没有使用库中的符号,但只要后者通过库init函数注册,主程序就会调用库中的函数。
但我正在使用libtool ...... 因此,以前面提到的问题为例,我需要写一些类似的东西:
bin_PROGRAMS = pktanon
pktanon_SOURCES = main.cpp
pktanon_DEPENDENCIES = $(lib_LIBRARIES)
pktanon_LDADD = libpktanon.la $(LDADD)
注意" la"扩展而不是" a"对于lib。
现在,我该如何将--whole-archive
选项传递给链接器? the question中建议的答案假定存档(.a
文件)的路径是已知的...在Makefile.am中对.libs / libptanon.a之类的路径进行硬编码感觉不对。 ...
如果尝试,链接器不喜欢在其整个归档文件中遇到.la
文件:
pktanon_LDFLAGS = -Wl,--whole-archive,libpktanon.la,--no-whole-archive
有什么建议吗?
答案 0 :(得分:0)
使用--whole-archive不可移植,那么为什么不创建一个Libtool便利库呢?在Automake Makefile.am中,将noinst_添加到库中,然后不是创建(可能是非pic)静态存档,而是将库中的所有目标文件添加到链接到它的任何内容中。它是便携式的,应该适用于这种情况,因为它看起来根本不像你想要一个库。