![](/img/trans.png)
[英]How can I link to thread sanitizer with a newer version of clang than the system provides?
[英]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.list
有deb-src:
這將下載系統的gcc
的構建依賴項) (可能與最新的GCC有很多共同的依賴關系)。
否則, GCC源代碼包含一個contrib / download_prerequisites腳本,應該很方便。
仔細閱讀GCC 建設程序 。 不要忘記在源樹之外編譯它。 您可能希望將--program-suffix=-5-mine
傳遞給它的configure
當然,您還需要構建使用新構建的GCC編譯(或交叉編譯)代碼所需的所有其他軟件,包括binutils , gdb和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.