2013-10-16 26 views
4

我正在運行CentOS 6.4,需要更高版本的C++編譯器來構建我的開發工具(本例中爲Qt Creator)。RedHat devtoolset - 分發已編譯代碼的含義

我不清楚使用devtools的影響,我希望有人能解釋。

  1. 如果我使用devtools編譯程序,這是否意味着可執行文件將在其他Centos 6.4安裝中運行而不會發生變化?
  2. 或..我知道必須運送我編譯的程序庫或其他文件嗎?
  3. 如果是的話......我必須修改我的C++代碼來引用後面的庫嗎?或者這是由安裝我編譯的程序的人完成的
+1

您可能意思是devtoolset而非devtools – marcin

回答

2

我希望這個有點晚的答案仍然可以幫助你。我發現在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上運行,而無需爲安裝額外的庫/更新。

要明確地回答你的問題:

  1. 是的,差不多。
  2. 編號
  3. 不要更改代碼,只需在鏈接時添加-static-libstdc++即可。
+0

您也可以使用二進制應用程序重新分發libstdC++共享庫 – Juan