Gcc 自动生成:编译器选项的顺序妨碍生成

Gcc 自动生成:编译器选项的顺序妨碍生成,gcc,automake,Gcc,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…”移动到最后,并独立运行它,就可以了(如下所示) 那么选择的顺序真的很重要吗?不管怎样,怎样才能

我是一个汽车工具新手。在“src/Makefile.am”中,我使用“am_LDFLAGS=-L…-L…”

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

在最后的命令中

$ g++ -O2 -L... -l... -o target_name [some *.o files]
编译器抱怨“未定义对…”的引用

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

那么选择的顺序真的很重要吗?不管怎样,怎样才能使它平滑呢

非常感谢。

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

“-l”和“-l”的顺序确实有区别。发件人:

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

因此,库应该出现在对象文件/依赖它们的其他库之后

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