修改g++库路径
Modify g++ library path
我最近安装了 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
您可以有一个新的(或修改现有的)GCC specs
文件,文档是 here.
AFAIK,specs
文件在您的“安装”目录中,因此您将在
/usr/lib/gcc/x86_64-unknown-linux-gnu/4.9.2/specs
中(如果它不存在,您可以创建)。
据我所知,有一些内置默认值,但您可以将系统配置为具有明确的默认值。
另请阅读 GCC 的 debugging options。您可能想使用 -dumpspecs
来获取内置的默认规范。
详细信息可能非常特定于您的系统,特别是如果您从其源代码编译 GCC。
我对 specs
文件不够熟悉,无法为您的特定问题提供可靠的解决方案。您可以在 gcc-help@gcc.gnu.org
上询问详情。
注意:我倾向于认为用 --prefix=/usr
配置 gcc
(而不是像默认的 --prefix=/usr/local/
或某些 --prefix=/opt/
等非系统前缀...) 是一个错误(或者至少也使用 --program-suffix=-4.9
)。您可能会混淆您的 gcc
和系统 gcc
;如果你想替换你的系统gcc
(这可能是危险的)你应该使用与你的系统gcc
相同的参数配置你的新gcc
有。请注意 /usr/bin/gcc -v
告诉您系统 gcc
是如何配置的(在覆盖之前完成)。
在某些较旧的系统上编译最新的 GCC 4.9 时,我通常建议使用 --prefix=/usr/local/
和 --program-suffix=-4.9
配置它,然后将 /usr/local/bin/
添加到您的 $PATH
,并且使用 make CC=gcc-4.9 CXX=g++-4.9
来构建程序。
我最近安装了 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
您可以有一个新的(或修改现有的)GCC specs
文件,文档是 here.
AFAIK,specs
文件在您的“安装”目录中,因此您将在
/usr/lib/gcc/x86_64-unknown-linux-gnu/4.9.2/specs
中(如果它不存在,您可以创建)。
据我所知,有一些内置默认值,但您可以将系统配置为具有明确的默认值。
另请阅读 GCC 的 debugging options。您可能想使用 -dumpspecs
来获取内置的默认规范。
详细信息可能非常特定于您的系统,特别是如果您从其源代码编译 GCC。
我对 specs
文件不够熟悉,无法为您的特定问题提供可靠的解决方案。您可以在 gcc-help@gcc.gnu.org
上询问详情。
注意:我倾向于认为用 --prefix=/usr
配置 gcc
(而不是像默认的 --prefix=/usr/local/
或某些 --prefix=/opt/
等非系统前缀...) 是一个错误(或者至少也使用 --program-suffix=-4.9
)。您可能会混淆您的 gcc
和系统 gcc
;如果你想替换你的系统gcc
(这可能是危险的)你应该使用与你的系统gcc
相同的参数配置你的新gcc
有。请注意 /usr/bin/gcc -v
告诉您系统 gcc
是如何配置的(在覆盖之前完成)。
在某些较旧的系统上编译最新的 GCC 4.9 时,我通常建议使用 --prefix=/usr/local/
和 --program-suffix=-4.9
配置它,然后将 /usr/local/bin/
添加到您的 $PATH
,并且使用 make CC=gcc-4.9 CXX=g++-4.9
来构建程序。