RedHat devtoolset - 分发编译代码的含义

TSG*_*TSG 6 c++ libstdc++ libraries devtoolset redhat-dts

我正在运行 CentOS 6.4 并且需要更高版本的 C++ 编译器来构建我的开发工具(在本例中为 Qt Creator)。

我不清楚使用 devtools 的含义,我希望有人能解释一下。

  1. 如果我使用 devtools 编译程序,这是否意味着可执行文件将在其他 Centos 6.4 安装上运行而无需更改?
  2. 或者..我知道我编译的程序必须附带库或其他文件吗?
  3. 如果是这样......我是否必须修改我的 C++ 代码以引用更高版本的库?或者这是由安装我编译的程序的人完成的

Dan*_*rey 3

我希望这个有点晚的答案仍然可以帮助你。我发现devtoolset在 RHEL 6.4 上使用(我的例子是 1.1,但这应该不重要)编译我的项目会生成几乎可以标准 RedHat EL 6.4 上运行的二进制文件(对于 Centos 6.4 应该类似)。

我遇到的唯一麻烦是使用 编译我的项目-std=c++11,由于符号不兼容而产生了一些问题。原因是 GCC 人员认为标准库的这些部分在 GCC 4.4 中是实验性的,因此他们在某些地方破坏了 ABI 兼容性。

事实证明,有一个简单的解决方法:将您的程序与附加的命令行参数链接起来-static-libstdc++。这样,二进制文件会变得更大一些,但可以在未经修改的 RHEL 6.4 上运行,而无需为devtoolset.

明确回答您的问题:

  1. 是的,几乎。
  2. 不。
  3. 不要更改代码,只需-static-libstdc++在链接时添加即可。