【问题标题】:autotools and -Wl,-whole-archiveautotools 和 -Wl,-whole-archive
【发布时间】:2014-03-05 22:36:30
【问题描述】:

是否可以告诉 autotools 使用 -Wl,-whole-archive 标志链接其中一个库?

Makefile.am

bin_PROGRAMS = pktanon 
pktanon_SOURCES = main.cpp
pktanon_DEPENDENCIES = $(lib_LIBRARIES)
pktanon_LDADD = libpktanon.a $(LDADD) 

我需要将 libpktanon.a 与 -Wl,-whole-archive 标志链接起来,我还想执行如下操作:

g++ -o pktanon main.o -Wl,-whole-archive libpktanon.a -Wl,-no-whole-archive -l...

(如this question)

【问题讨论】:

  • 我必须承认我避免使用 automake,但为什么不把整件事写在 pktanon_LDADD 中呢?
  • error: linker flags such as '-Wl,-whole-archive' belong in 'pktanon_LDFLAGS';添加pktanon_LDFLAGS = -Wl,-whole-archive 会产生以下行和两页链接错误:g++ -g -O2 -std=c++11 -Wl,-whole-archive -o pktanon main.o -l...

标签: c++ autotools


【解决方案1】:

我遇到了类似的问题here。你可以这样做:

pktanon_LDFLAGS = -Wl,--whole-archive,libpktanon.a,--no-whole-archive

问题是 Libtool 不保证链接器标志在它执行的实际命令行上的顺序,所以你必须像这样强制它。

【讨论】:

  • 要将 libpktanon.a 文件作为依赖项公开(以防它在旁边构建),您可能还需要一个虚拟的 pktanon_LDADD = libpktanon.a 行。
  • 我之前也遇到过类似的问题。然而,这些标志被放在命令的最开始,编译失败。
猜你喜欢
  • 1970-01-01
  • 2015-08-06
  • 1970-01-01
  • 1970-01-01
  • 2019-02-25
  • 2010-10-22
  • 2017-09-14
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多