Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/cmake/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
CMake使用devtoolset中的gcc,但是链接错误,libgcc和libstd++;_Gcc_Cmake_Devtoolset - Fatal编程技术网

CMake使用devtoolset中的gcc,但是链接错误,libgcc和libstd++;

CMake使用devtoolset中的gcc,但是链接错误,libgcc和libstd++;,gcc,cmake,devtoolset,Gcc,Cmake,Devtoolset,我有一个安装了CMake、devtoolset-6和standart gcc 4.8.2的项目。 CMake正确查找正确的gcc: -- The C compiler identification is GNU 6.2.1 -- The CXX compiler identification is GNU 6.2.1 -- Check for working C compiler: /opt/rh/devtoolset-6/root/usr/bin/cc -- Check for working

我有一个安装了CMake、devtoolset-6和standart gcc 4.8.2的项目。 CMake正确查找正确的gcc:

-- The C compiler identification is GNU 6.2.1
-- The CXX compiler identification is GNU 6.2.1
-- Check for working C compiler: /opt/rh/devtoolset-6/root/usr/bin/cc
-- Check for working C compiler: /opt/rh/devtoolset-6/root/usr/bin/cc -- works
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Detecting C compile features
-- Detecting C compile features - done
-- Check for working CXX compiler: /opt/rh/devtoolset-6/root/usr/bin/c++
-- Check for working CXX compiler: /opt/rh/devtoolset-6/root/usr/bin/c++ -- works
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
-- Detecting CXX compile features
-- Detecting CXX compile features - done
设置路径和LD_库_路径

echo $PATH
/opt/rh/devtoolset-6/root/usr/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin
echo $LD_LIBRARY_PATH
/opt/rh/devtoolset-6/root/usr/lib64:/opt/rh/devtoolset-6/root/usr/lib
该项目构建正确,但与/usr/lib64中错误的libgcc和libstd++冲突

  libstdc++.so.6 => /usr/lib64/libstdc++.so.6 (0x00007f60b47bf000)
  libgcc_s.so.1 => /usr/lib64/libgcc_s.so.1 (0x00007f60b45a8000)

怎么了?

这不是一个bug,而是一个特性!:) RH DevToolset不仅仅是一个内置的替代编译器。它是
libstdc++
是一个LD脚本。二进制文件中新的C++11(及以上)符号将通过静态库(专门构建并附带DTS)解析。但是,旧符号(存在于操作系统附带的
libstdc++
中)将被动态解析。这就是为什么
ldd
/usr/lib64
中显示
libstdc++
!此外,它默认有旧的C++ ABI…使您的现代C++代码兼容W/ORD <代码> LBSTDC++< /COD> DSO .< /P>

此特性允许您使用现代C++标准,并生成一个二进制文件,该二进制文件可以在原始OS(CENTOS/RHEL)<强> W/O中执行任何附加的“可再分布”共享库>/P>


JFYI,如果您使用的是
strip
,请确保您使用的是DTS中的而不是操作系统中的
binutils
中的“本机”
!否则,。

这不是一个bug,而是一个特性!:) RH DevToolset不仅仅是一个内置的替代编译器。它是
libstdc++
是一个LD脚本。二进制文件中新的C++11(及以上)符号将通过静态库(专门构建并附带DTS)解析。但是,旧符号(存在于操作系统附带的
libstdc++
中)将被动态解析。这就是为什么
ldd
/usr/lib64
中显示
libstdc++
!此外,它默认有旧的C++ ABI…使您的现代C++代码兼容W/ORD <代码> LBSTDC++< /COD> DSO .< /P>

此特性允许您使用现代C++标准,并生成一个二进制文件,该二进制文件可以在原始OS(CENTOS/RHEL)<强> W/O中执行任何附加的“可再分布”共享库>/P>


JFYI,如果您使用的是
strip
,请确保您使用的是DTS中的而不是操作系统中的
binutils
中的“本机”
!否则,.

运行ldd时是否仍设置了LD\U LIBRARY\U路径?二进制是suid吗?实际上,在devtoolset-6/root/usr/lib64中是否有更新的libstdc++.so.6?我的理解是,他们使用system one,并与一些静态库链接以添加缺少的符号。这两个问题-是的,如果二进制文件是suid,那么LD_library_路径是无用的。您需要设置rpath,但正如我在更新的注释中所解释的,我认为这对于devtoolset不是必需的。在运行ldd时是否仍然设置了LD_LIBRARY_路径?二进制是suid吗?实际上,在devtoolset-6/root/usr/lib64中是否有更新的libstdc++.so.6?我的理解是,他们使用system one,并与一些静态库链接以添加缺少的符号。这两个问题-是的,如果二进制文件是suid,那么LD_library_路径是无用的。您可能需要设置rpath,但正如我在更新的注释中所解释的,我认为这对于devtoolset是不必要的。