在gcc和g++的包含路径和库路径中指定顺序

16

我有多个版本的同名库(boost libraries),每个版本都被安装在自己的目录下。我知道如何指示编译器和链接器在特定目录中搜索头文件和库文件 (-I-L),我也知道如何将实际的库文件传递给链接器。

我的问题是如何在编译器和链接器的搜索路径中指定优先级,以便它先搜索文件夹A,然后再搜索文件夹B,并选择A的库版本而不是B的版本。我对所有符合条件的目录的顺序感兴趣,即默认的gccg++目录以及在-I-L之后指定的目录。

我的发行版是Ubuntu 14.04,我使用g++ 4.86

1个回答

25

GCC会按照命令行中出现的从左到右的顺序搜索您的-I目录,并且在搜索默认的#include目录之前搜索所有的-I目录。这里是文档

GCC调用系统链接器ld来执行链接。 GCC的-L选项和-l选项的出现顺序将保留并传递给链接器。

链接器将按照命令行中出现的从左到右的顺序搜索您的-L目录,并且在搜索默认的链接目录之前搜索所有的-L目录。无论在命令行中如何混合使用-L-l选项,所有指定的-L选项的顺序都适用于所有-l选项。例如:

-La -lfoo -Lb -lbar

等价于以下任何一个:

-La -Lb -lfoo -lbar
-lfoo -La -Lb -lbar
-lfoo -lbar -La -Lb

这里是文档


嗯... 但仍不清楚它是否会在找到所需的包含文件后停止搜索,还是会耗尽所有搜索。换句话说,是第一个还是最后一个获胜。这并不是自动显而易见的... - Zeus

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接