【问题标题】:RedHat devtoolset - implications for distributing compiled codeRedHat devtoolset - 分发编译代码的含义
【发布时间】:2013-10-25 07:14:49
【问题描述】:

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

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

  1. 如果我使用 devtools 编译程序,这是否意味着可执行文件将在其他 Centos 6.4 安装上运行而无需更改?
  2. 或者..我是否知道必须将库或其他文件与我的编译程序一起提供?
  3. 如果是这样...我是否必须修改我的 C++ 代码才能引用以后的库?或者这是安装我编译的程序的人所做的事情

【问题讨论】:

  • 你的意思可能是 devtoolset 而不是 devtools

标签: c++ libraries libstdc++ devtoolset redhat-dts


【解决方案1】:

我希望这个有点晚的答案仍然可以帮助你。我发现在 RHEL 6.4 上使用 devtoolset(在我的情况下为 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++即可。

【讨论】:

  • 您还可以使用二进制应用程序重新分发 libstdc++ 共享库
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-08-27
  • 2019-07-20
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多