0

我最近安装了 gcc 4.9.2 并在与 libs 链接时发现了一个问题。

搜索路径的输出:

install: /usr/lib/gcc/x86_64-unknown-linux-gnu/4.9.2/
programs: =/usr/libexec/gcc/x86_64-unknown-linux-gnu/4.9.2/:/usr/libexec/gcc/x86_64-unknown-linux-gnu/4.9.2/:/usr/libexec/gcc/x86_64-unknown-linux-gnu/:/usr/lib/gcc/x86_64-unknown-linux-gnu/4.9.2/:/usr/lib/gcc/x86_64-unknown-linux-gnu/:/usr/lib/gcc/x86_64-unknown-linux-gnu/4.9.2/../../../../x86_64-unknown-linux-gnu/bin/x86_64-unknown-linux-gnu/4.9.2/:/usr/lib/gcc/x86_64-unknown-linux-gnu/4.9.2/../../../../x86_64-unknown-linux-gnu/bin/x86_64-linux-gnu/:/usr/lib/gcc/x86_64-unknown-linux-gnu/4.9.2/../../../../x86_64-unknown-linux-gnu/bin/
libraries: =/usr/lib/gcc/x86_64-unknown-linux-gnu/4.9.2/:/usr/lib/gcc/x86_64-unknown-linux-gnu/4.9.2/../../../../x86_64-unknown-linux-gnu/lib/x86_64-unknown-linux-gnu/4.9.2/:/usr/lib/gcc/x86_64-unknown-linux-gnu/4.9.2/../../../../x86_64-unknown-linux-gnu/lib/x86_64-linux-gnu/:/usr/lib/gcc/x86_64-unknown-linux-gnu/4.9.2/../../../../x86_64-unknown-linux-gnu/lib/../lib64/:/usr/lib/gcc/x86_64-unknown-linux-gnu/4.9.2/../../../x86_64-unknown-linux-gnu/4.9.2/:/usr/lib/gcc/x86_64-unknown-linux-gnu/4.9.2/../../../x86_64-linux-gnu/:/usr/lib/gcc/x86_64-unknown-linux-gnu/4.9.2/../../../../lib64/:/lib/x86_64-unknown-linux-gnu/4.9.2/:/lib/x86_64-linux-gnu/:/lib/../lib64/:/usr/lib/x86_64-unknown-linux-gnu/4.9.2/:/usr/lib/x86_64-linux-gnu/:/usr/lib/../lib64/:/usr/lib/gcc/x86_64-unknown-linux-gnu/4.9.2/../../../../x86_64-unknown-linux-gnu/lib/:/usr/lib/gcc/x86_64-unknown-linux-gnu/4.9.2/../../../:/lib/:/usr/lib/

真的,有问题的事情是这样的:

/usr/lib/x86_64-linux-gnu/:/usr/lib/../lib64/

我需要更改这两个库的顺序(以便 lib64 具有更高的搜索优先级),因为两个目录都有 libstdc++.so.6,我需要使用 lib64 文件夹中的那个。

我该怎么做?

请不要:

1,建议我更改 LD_LIBRARY_PATH 以明确包含 libstdc++.so.6 因为我确定 x86_64-linux-gnu 文件夹中还有其他东西是 lib64 文件夹中的旧版本 - 我从旧版本升级了 g++。

2,建议我在 g++ -L 选项中明确包含 lib64/libstdc++.so.6。

非常感谢。

/************************编辑了解更多信息********************* ***/

根据下面的要求,这里有一些关于配置和安装的详细信息(我从 gcc.gnu.org 下载了 4.9.2 源,解压缩并在 4.9.2 顶级文件夹中启动):

mkdir ../gcc-build                                   &&
cd    ../gcc-build                                   &&

../gcc-4.9.2/configure                               \
    --prefix=/usr                                    \
    --libdir=/usr/lib                                \
    --enable-shared                                  \
    --enable-threads=posix                           \
    --enable-__cxa_atexit                            \
    --disable-multilib                               \
    --with-system-zlib                               \
    --enable-languages=c,c++ &&
make
4

1 回答 1

1

你可以有一个新的(或修改现有的)GCCspecs文件,文档在这里

AFAIK,该specs文件位于您的“安装”目录中,因此您将在
/usr/lib/gcc/x86_64-unknown-linux-gnu/4.9.2/specs其中(如果它不存在,您可以创建它)。

AFAIK 有一些内置的默认值,但您可以将系统配置为具有明确的默认值。

另请阅读 GCC 的调试选项。您可能希望使用-dumpspecs来获取内置的默认规范。

详细信息可能与您的系统高度相关,特别是如果您从源代码编译GCC 。

我对specs文件不够熟悉,无法为您的特定问题提供可靠的解决方案。您可能会询问gcc-help@gcc.gnu.org详细信息。


注意:我倾向于认为配置 a gccwith (而不是像 default或 some等--prefix=/usr非系统前缀)是一个错误(或者至少也使用)。您可能会将您的系统与系统混淆;如果您想更换您的系统(这可能很危险),您应该使用与您的系统相同的参数配置您的新系统。请注意,它告诉您系统是如何配置的(在覆盖之前完成)。--prefix=/usr/local/--prefix=/opt/--program-suffix=-4.9gccgccgccgccgcc/usr/bin/gcc -vgcc

在某些较旧的系统上编译最近的 GCC 4.9 时,我通常建议使用它进行配置,--prefix=/usr/local/然后--program-suffix=-4.9添加/usr/local/bin/到您的$PATH, 并make CC=gcc-4.9 CXX=g++-4.9用于使用它构建程序。

于 2015-02-22T21:51:19.467 回答