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

时间:2013-09-16 19:54:06

标签: gcc automake

我是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 个答案:

答案 0 :(得分: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'中的函数,则可能无法加载这些函数。 ...链接器通过扫描存档文件来处理存档文件,以查找已定义但尚未定义的符号的成员。

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