我是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...
所以期权的顺序很重要吗?无论如何,如何平滑它?
非常感谢。
答案 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'中的函数,则可能无法加载这些函数。 ...链接器通过扫描存档文件来处理存档文件,以查找已定义但尚未定义的符号的成员。
因此库应该出现在目标文件/依赖它们的其他库之后。