我有一个和this question非常相似的问题。我需要告诉链接器添加静态库,尽管似乎已经引用了它的符号。这样做的原因是,库中包含一个.init中的函数或使用( __attribute__ ((constructor)))执行其初始化,该初始化将从主程序调用注册()函数来注册其功能(读取:传递其他函数指针)。
因此,尽管主程序中似乎没有使用库中的任何符号,但只要库中的函数通过库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这样的路径是不对的……链接器不喜欢在其整个存档otpion中遇到.la文件,如果尝试:
pktanon_LDFLAGS = -Wl,--whole-archive,libpktanon.la,--no-whole-archive有什么建议吗?
发布于 2016-10-19 00:24:14
使用--whole archive是不可移植的,那么为什么不创建一个Libtool便利库呢?在您的Automake Makefile.am中,将noinst_添加到库中,然后它将获取库中的所有目标文件,并将其添加到链接到它的任何内容中,而不是创建一个(可能不是pic的)静态归档。它是可移植的,应该适用于这种情况,因为它看起来根本不需要一个库。
https://stackoverflow.com/questions/39994016
复制相似问题