我有一个库的多个版本,都有相同的名称(boost库),每个版本都安装在自己的目录中。我知道如何指示编译器和链接器在某些目录中搜索头文件和库(-I
和-L
)。 I am also aware如何将实际的库文件传递给链接器。
我的问题是如何在编译器和链接器的搜索路径中指定优先级,以便在搜索文件夹A
之前搜索文件夹B
并获取A
的版本库而不是B
的。我对所有符合条件的目录(即默认的gcc
和g++
目录)以及-I
和-L
之后指定的目录感兴趣。
我的发行版是Ubuntu 14.04
,我使用g++
4.8
最多6
。
答案 0 :(得分:10)
GCC将按照从左到右的顺序搜索您的-I
目录
出现在命令行中,它将在之前搜索所有-I
目录
默认的#include
目录。这是the documentation。
GCC调用系统链接器ld
来执行
连锁。 GCC的-L
选项及其-l
选项的出现都会通过
保留订单的链接器。
链接器将按从左到右的顺序搜索您的-L
目录
它们出现在命令行中,它将搜索所有-L
目录
在默认链接目录之前。所有-L
选项,按指定的顺序,
适用于所有-l
选项,无论-L
和-l
选项如何混合
在命令行中。 E.g。
-La -lfoo -Lb -lbar
相当于以下任何一项:
-La -Lb -lfoo -lbar
-lfoo -La -Lb -lbar
-lfoo -lbar -La -Lb