【问题标题】:automake: the ordering of compiler options hinders makeautomake:编译器选项的顺序阻碍了 make
【发布时间】:2013-09-16 19:54:06
【问题描述】:

我是 automake 工具的新手。在“src/Makefile.am”中,我使用“AM_LDFLAGS = -L... -l...”。

然后,我运行“autoreconf --force --install ; ./configure ; make”

在最后一条命令中,

$ g++ -O2 -L... -l... -o target_name [some *.o files]

编译器报错“未定义的引用...”。

但是如果我复制它并将“-L...-l...”移动到最后,并独立运行它就可以了(如下)。

$ g++ -O2 -o target_name [some *.o files] -L... -l...

所以选项的顺序很重要吗?无论如何,如何平滑它?

非常感谢。

【问题讨论】:

    标签: gcc automake


    【解决方案1】:

    对于“-L”选项,请尝试使用 LDADD 或 target_name_LDADD 变量(其中 target_name 替换为实际目标名称)。这会将这些标志放在链接命令的末尾。

    “-l”和“-L”的顺序确实有所不同。来自http://gcc.gnu.org/onlinedocs/gcc/Link-Options.html

    -l 库 链接时搜索名为 library 的库。 ...在您编写此选项的命令中的位置有所不同;链接器按照指定的顺序搜索和处理库和目标文件。因此,“foo.o -lz bar.o”在文件 foo.o 之后但在 bar.o 之前搜索库“z”。如果 bar.o 引用了“z”中的函数,则可能不会加载这些函数。 ...链接器通过扫描存档文件来处理存档文件,其中包含定义迄今为止已被引用但尚未定义的符号的成员。

    所以库应该出现在目标文件/其他依赖它们的库之后。

    【讨论】:

      猜你喜欢
      • 2021-05-27
      • 1970-01-01
      • 2016-08-04
      • 2023-03-31
      • 1970-01-01
      • 1970-01-01
      • 2014-01-09
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多