首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >CMake从devtoolset中使用gcc,但链接指向错误的libgcc和libstd++。

CMake从devtoolset中使用gcc,但链接指向错误的libgcc和libstd++。
EN

Stack Overflow用户
提问于 2019-07-26 07:58:18
回答 1查看 1.2K关注 0票数 0

我有一个项目与CMake,开发工具集-6和标准gcc 4.8.2安装.CMake正确地找到正确的gcc:

代码语言:javascript
复制
-- 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_LIBRARY_PATH设置

代码语言:javascript
复制
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 64中的libgcc和libstd++错误的

代码语言:javascript
复制
  libstdc++.so.6 => /usr/lib64/libstdc++.so.6 (0x00007f60b47bf000)
  libgcc_s.so.1 => /usr/lib64/libgcc_s.so.1 (0x00007f60b45a8000)

怎么啦?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-07-26 22:25:29

这不是一个bug,而是一个特性!:) RH DevToolset并不仅仅是一个可供选择的编译器。libstdc++是一个LD脚本。二进制文件中的新C++11 (及以上)符号将通过静态库(专门构建并提供w/ DTS)进行解析。但是,旧的符号(存在于操作系统提供的libstdc++中)将被动态解析。这就是为什么ldd向您展示来自/usr/lib64libstdc++!而且,默认情况下,它有旧的C++ ABI .使您的现代C++代码兼容w/旧libstdc++ DSO。

此特性允许您使用现代C++标准,并生成一个二进制文件,可以在原始OS (CentOS/RHEL) w/o中执行任何额外的“可再发行”共享库

JFYI,如果您使用strip,请确保您使用它来自DTS和,而不是“本机”的一个(从操作系统以binutils自带)!否则,really bad things can happen

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57215604

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档