我最近安装了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
答案 0 :(得分:1)
您可以拥有新的(或修改现有的)GCC specs
文件,文档为here。
AFAIK,specs
文件位于“安装”目录中,因此您将在/usr/lib/gcc/x86_64-unknown-linux-gnu/4.9.2/specs
(如果不存在则可以创建)。
AFAIK有一些内置的默认值,但您可以将系统配置为显式的。
另请阅读GCC的debugging options。您可能希望使用-dumpspecs
来获取内置的默认规范。
详细信息可能对您的系统非常具体,特别是如果您从其源代码编译GCC。
我对specs
文件不够熟悉,无法为您的特定问题提供可靠的解决方案。您可以在gcc-help@gcc.gnu.org
上询问详细信息。
注意:我倾向于认为使用gcc
配置--prefix=/usr
(而不是默认的--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
,并使用{ {1}}用它来构建程序。