2

我在两个版本之间对 g++ 的隐式 LIBRARY_PATH 修改有问题(g++ -v给出这个信息)。我将 LIBRARY_PATH 设置为具有自定义库的单个本地目录。然而,事实证明只有一个版本的 g++(我们称之为版本 A)正确链接,另一个(版本 B)链接到系统默认值,这是不希望的。显然,目录的顺序混淆了,我的规范没有得到适当的尊重。这与gcc 4.2 及更高版本中 /usr/lib 之前不再使用的 LIBRARY_PATH 类似的问题吗?虽然不是这些版本。

不知何故,我萌生了查看两个不同版本的规格文件的想法(通过 获得它们g++ -dumpspecs > specs)。然后,我尝试查看使用另一个版本 (A) 的规范文件运行 g++ 版本(B;产生 *un*expected 修改)是否仍会产生该修改,令我松了一口气的是 LIBRARY_PATH 现在完全一样我期待它(匹配版本A)!

我进一步追踪了这个奇怪修改发生在以下行的位置:

. !m64 !m32;.:../lib64 m64 !m32;.:../lib32 !m64 m32;

除了似乎影响 LIBRARY_PATH 的设置/修改之外,我很遗憾不知道这条线是什么意思。因此,我希望你们中的一些人能够“破译”这条线并解释它的含义,以便我可以根据我的要求尝试修改它。

谢谢!

4

1 回答 1

3

该行会影响相对于 GCC$PREFIX/lib目录的库的查找方式(GCC 安装到的目录在哪里$PREFIX。)

它分为三个部分:

$PREFIX/lib/.在命令行上既不使用-m32或也不使用时使用。-m64

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

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

这对我来说表明您使用的是 Debian 或 Ubuntu,我认为从 FSF 源构建的香草 GCC 不会在规范中包含它。您的 GCC 版本都是来自.deb软件包还是您自己安装的?(最近 Debian/Ubuntu 版本中的 Multi Arch 支持移动了库目录,因此破坏了原版 GCC,我认为 Debian 和 Ubuntu 为它们的.deb软件包修补了 GCC 代码。)

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

另外,为什么不直接使用-L而不是LIBRARY_PATH?用 指定的目录-L总是最先出现,在系统目录或 GCC 自己的目录或LIBRARY_PATH.

于 2012-07-29T01:08:43.227 回答