automake:编译器选项的顺序阻碍了 make

Posted

技术标签:

【中文标题】automake:编译器选项的顺序阻碍了 make【英文标题】:automake: the ordering of compiler options hinders 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...

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

非常感谢。

【问题讨论】:

【参考方案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”中的函数,则可能不会加载这些函数。 ...链接器通过扫描存档文件来处理存档文件,其中包含定义迄今为止已被引用但尚未定义的符号的成员。

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

【讨论】:

以上是关于automake:编译器选项的顺序阻碍了 make的主要内容,如果未能解决你的问题,请参考以下文章

大型项目使用Automake/Autoconf完成编译配置

Linux下automake工具使用(自动构建Makefile文件)

#导入Word文档图片# Linux下automake工具使用(自动构建Makefile文件)

Automake:如何为编译器命令添加前缀

控制make命令的输出更简洁,不要回显每个命令

automake 中的构建选项