C ++ - g ++链接错误的stdlibc ++

问题描述 投票:0回答:1

我有以下程序:

#include <iostream>                    

int main()                             
{                                      
    std::cerr << "hejsan" << std::endl;
} 

使用以下命令编译它:

g ++ main.cpp -Wl,-rpath,/ app / vbuild / RHEL6-x86_64 / gcc / 6.2.0 / lib -std = c ++ 11

运行ldd返回:

ldd a.out
      linux-vdso.so.1 =>  (0x00007ffe8f1eb000)
      libstdc++.so.6 => /usr/lib64/libstdc++.so.6 (0x00000032f9e00000)
      libm.so.6 => /lib64/libm.so.6 (0x00000032f6600000)
      libgcc_s.so.1 => /lib64/libgcc_s.so.1 (0x00000032f8a00000)
      libc.so.6 => /lib64/libc.so.6 (0x00000032f5a00000)
      /lib64/ld-linux-x86-64.so.2 (0x00000032f5600000)

如您所见,它在/usr/lib64/libstdc++.so.6中选择了libstdc ++

设置LD_DEBUG = libs显示以下内容:

792127:     find library=libstdc++.so.6 [0]; searching
792127:      search path=/app/vbuild/RHEL6-x86_64/gcc/6.2.0/lib/tls/x86_64:/app/vbuild/RHEL6-x86_64/gcc/6.2.0/lib/tls:/app/vbuild/RHEL6-x86_64/gcc/6.2.0/lib/x86_64:/app/vbuild/RHEL6-x86_64/gcc/6.2.0/lib          (RPATH from file ./a.out)
792127:       trying file=/app/vbuild/RHEL6-x86_64/gcc/6.2.0/lib/tls/x86_64/libstdc++.so.6
792127:       trying file=/app/vbuild/RHEL6-x86_64/gcc/6.2.0/lib/tls/libstdc++.so.6
792127:       trying file=/app/vbuild/RHEL6-x86_64/gcc/6.2.0/lib/x86_64/libstdc++.so.6
792127:       trying file=/app/vbuild/RHEL6-x86_64/gcc/6.2.0/lib/libstdc++.so.6
792127:      search cache=/etc/ld.so.cache
792127:       trying file=/usr/lib64/libstdc++.so.6

这是我想要它使用的stdlib:尝试file = / app / vbuild / RHEL6-x86_64 / gcc / 6.2.0 / lib / libstdc ++。so.6但不知怎的,它看起来像正在使用缓存。我没有root访问权限,也无法删除任何内容。我该如何解决这个问题?

这是问题,因为我使用它来对付更复杂的代码,这需要GLIBCXX比usr / lib64中提供的stdlib更高版本。

c++ gcc redhat ld
1个回答
1
投票

我认为这可能基本上与我的问题重复:Forcing or preventing use of a particular minor version of libstdc++

这个问题包括一种安装程序的方法,该程序使用更高版本的gcc编译,但可能是一个黑客。这个问题寻求一个更好的选择,虽然我认为我接近一个,但我还没有接受答案。

它没有在问题中明确提到,但我有更新版本的gcc安装到/ opt / gcc /。我设置我的路径使用它们如下:

PREFIX=/opt/gcc6.3.0
export C_INCLUDE_PATH=$PREFIX/include
export CPLUS_INCLUDE_PATH=$PREFIX/include
export LD_LIBRARY_PATH=$PREFIX/lib:$PREFIX/lib64:$LD_LIBRARY_PATH
export PATH=$PREFIX/bin:$PATH

使用cmake进行配置时,使用它会很有用:

CC=`which gcc` CXX=`which c++` cmake ...

确保cmake找不到系统gcc本身。

© www.soinside.com 2019 - 2024. All rights reserved.