解码gcc规范文件行

解码gcc规范文件行,gcc,replace,line,specs,Gcc,Replace,Line,Specs,我在两个版本之间对g++进行隐式库路径修改时遇到了一个问题(g++-v给出了这个信息)。我将库路径设置为一个本地目录,其中有自定义库。然而,事实证明,只有一个版本的g++(我们称之为版本A)正确链接,另一个版本(版本B)链接到系统默认值,这是不需要的。显然,目录的顺序是混乱的,我的规范没有得到适当的尊重。这是一个类似于的问题,尽管这些版本没有 不知怎的,我想出了一个主意,看看两个不同版本的规范文件(通过g++-dumpspecs>specs获得)。然后,我试着看看,使用另一个版本(A)的spec

我在两个版本之间对g++进行隐式库路径修改时遇到了一个问题(
g++-v
给出了这个信息)。我将库路径设置为一个本地目录,其中有自定义库。然而,事实证明,只有一个版本的g++(我们称之为版本A)正确链接,另一个版本(版本B)链接到系统默认值,这是不需要的。显然,目录的顺序是混乱的,我的规范没有得到适当的尊重。这是一个类似于的问题,尽管这些版本没有

不知怎的,我想出了一个主意,看看两个不同版本的规范文件(通过
g++-dumpspecs>specs
获得)。然后,我试着看看,使用另一个版本(A)的specs文件运行g++(B;产生*un*预期修改)的版本是否仍然会产生该修改,让我感到欣慰的是,库路径现在与我预期的完全一致(匹配版本A)

我进一步追溯了这一奇怪的修改发生在以下几行:

. !m64 !m32;.:../lib64 m64 !m32;.:../lib32 !m64 m32;
除了似乎会影响库路径的设置/修改之外,很遗憾,我不知道这行的意思。 因此,我希望你们中的一些人能够“解读”这一行,并解释它的含义,以便我可以尝试根据我的要求修改它


谢谢大家!

该行影响相对于GCC的
$PREFIX/lib
目录查找库的方式(其中
$PREFIX
是GCC安装到的目录。)

它包括三个部分:

在命令行上既不使用
-m32
也不使用
-m64
时,将使用
$PREFIX/lib/

$PREFIX/lib/:$PREFIX/lib/。/lib64
在使用
-m64
时使用

$PREFIX/lib/:$PREFIX/lib/。/lib32
在使用
-m32
时使用

这对我来说意味着你正在使用Debian或Ubuntu,我不认为一个来自FSF源代码的普通GCC构建会在规范中包含这一点。您的两个GCC版本都来自
.deb
软件包,还是您自己安装的?(最近Debian/Ubuntu版本中的多拱支持移动了库目录,因此打破了传统的GCC,我认为Debian和Ubuntu为他们的
.deb
包修补了GCC代码。)

能否为每个版本添加链接到
g++-v
的输出,以查看每个版本使用的确切库搜索路径


另外,为什么不直接使用
-L
而不是
库路径
?使用
-L
指定的目录总是排在第一位,在系统目录或GCC自己的目录或
库路径中指定的目录之前

非常感谢,这可能会非常有用。g++ver。A实际上是Debian提供的系统范围编译器。另一个版本(ver.B)附带了一个名为easybuild的系统,用于管理多用户系统上的安装和版本处理(可能需要显著不同的工具和版本)。我认为这个网站的整体设置非常具体,因此我不想在这里详细介绍。我不想使用“-L”,因为这必须(根据定义)明确设置,我认为使用“LIBRARY_PATH”将是一个通用的、透明的解决方案,以保证“安全”的默认链接。Debian提供的GCC是用修改其库搜索路径的补丁构建的,例如