簡體   English   中英

使用比平台提供的更新版本的GCC需要什么

[英]What is needed to use a newer version of GCC than the platform provides

我正在研究使用更新版本的GCC(例如5.2)的可能性,而不是我需要支持的一些平台(GCC 4.1),因為我想至少擁有C ++ 11的功能,也許甚至一些C ++ 14的東西。 我只提供一個可執行程序,而不是靜態或共享庫,我希望平台的用戶能夠鏈接。

我能夠編譯GCC 5.2和Boost 1.59(我目前正在使用的唯一帶有C ++ API的lib),並將其與可執行文件放在一起使用,並在具有4.4的測試系統上將$ ORIGIN添加到RPATH。

但我不清楚我還需要做什么,以確保一切正確/安全。 例如,我注意到libc,libm,libpthread等不是GCC構建的一部分,它仍然使用系統版本,就像許多其他第三方庫(例如zlib,libpng等)一樣。 我需要重建和分發所有那些安全嗎? 他們是一套標准的規則嗎?

還想知道我是否應該靜態地鏈接一些事情和規則是什么? 例如,只使用“-static”失敗,因為它尋找我在該系統上沒有的靜態pthread(我假設其他系統提供的庫)。 理想情況下,我想保持我的包的大小。

但我不清楚我還需要做什么,以確保一切正確/安全。 例如,我注意到libc,libm,libpthread等不是GCC構建的一部分,它仍然使用系統版本,就像許多其他第三方庫(例如zlib,libpng等)一樣。 我需要重建和分發所有那些安全嗎? 他們是一套標准的規則嗎?

如果您動態鏈接它們,請在可執行文件和共享庫上運行ldd ,以確保它從正確的位置加載libstdc++libgcc_s 這些是運行使用g ++構建的應用程序通常所需的唯一兩個依賴項。

通常,您不需要使用C接口提供自己的庫版本,除非您的應用程序需要具有不兼容API的較新版本。

最近的GCC編譯器有很多依賴項。

在某些發行版上,你可以要求它們:在Debian或相關的你可能aptitude build-dep gcc (前提是你的/etc/apt/sources.listdeb-src:這將下載系統的gcc的構建依賴項) (可能與最新的GCC有很多共同的依賴關系)。

否則, GCC源代碼包含一個contrib / download_prerequisites腳本,應該很方便。

仔細閱讀GCC 建設程序 不要忘記在源樹之外編譯它。 您可能希望將--program-suffix=-5-mine傳遞給它的configure

當然,您還需要構建使用新構建的GCC編譯(或交叉編譯)代碼所需的所有其他軟件,包括binutilsgdb和C庫

或者使用chroot (或一些容器來碼頭 )來安裝更新的Linux系統......

我注意到libc,libm,libpthread等不是GCC構建的一部分,它仍然使用系統版本,就像許多其他第三方庫(例如zlib,libpng等)一樣。 我需要重建和分發所有那些安全嗎?

不。如果您在要部署的系統上構建GCC,那么GCC二進制文件和共享庫將取決於libc,libpthread等的系統版本。

如果您然后使用該GCC編譯您的軟件,並在您的軟件旁邊部署新的libstc++.so.6 (使用$ORIGIN以便找到它),那么它仍將使用這些庫的系統版本。 這究竟應該發生什么以及你想要發生什么。 重建它們不會產生任何結果,只是意味着您可以在軟件旁邊部署更多庫。

按照指示從源代碼構建。 如果您遇到問題,請修改您的問題。

我認為有一種更簡單的方法可以自己編譯GCC。 [不幸的是我在從源代碼編譯之后想出來了很多次:)]

例如,在Ubuntu中,有一個PPA用於預編譯的GCC版本,這些版本尚未在官方存儲庫中存在。

sudo add-apt-repository ppa:ubuntu-toolchain-r/test

sudo apt-get update

sudo apt-get install gcc-5 g++-5
sudo update-alternatives 
sudo update-alternatives --remove-all gcc
sudo update-alternatives --remove-all g++
sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-5 20
sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-5 20
sudo update-alternatives --config gcc
sudo update-alternatives --config g++

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM