我在C++上構建了一個exec,但是當我將它部署到部署機器時,發現如下錯誤:'Dev production libc/libstdC++ mismatch [鏈接libc.so.6/libstdC++。so.6與舊版本]
/lib64/libc.so.6: version GLIBC_2.14 not found /usr/lib64/libstdc++.so.6: version GLIBCXX_3.4.14 not found /usr/lib64/libstdc++.so.6: version CXXABI_1.3.5 not found
這原來是因爲在部署機器是基於RHEL系統與舊的libc(2.12)/的libstdC++(3.4.13),而我的機器是用的Ubuntu近遠內核和庫。不幸的是,我無法升級部署系統。
我嘗試了一些常用的方法來處理這種像靜態鏈接(libc失敗)並將我的庫版本複製到集羣(並使用LD_PRELOAD和-Wl,-rpath選項運行),但它沒有工作。我也在我的機器上安裝了一箇舊版本的gcc,但這也不起作用。
有什麼辦法可以讓這個工作(也許在我的本地機器上創建對象代碼,並在另一臺機器上連接它)。或者有沒有辦法在部署機器上編譯代碼而無需將源代碼複製到它。 這可以從部署機器獲取系統庫的副本並嘗試讓gcc與它們鏈接嗎? (有任何問題,以及如何做正確)
相關Compile with older libc (version `GLIBC_2.14' not found)和Deploying Yesod to Heroku, can't build statically 和Build and run C++ code on different version of Linux and glibc
我知道通過虛擬機做到這一點的一種方式,但我想如果可能的話,以避免它。 (HT Mat)
解決方法:在您的開發盒上創建一個具有與生產目標相同操作系統版本的虛擬機。用它來編譯**和測試**。 – Mat
是創建虛擬機是可能的,我想盡量避免,如果可能的話。相關說明哪個虛擬機可能適合在Ubuntu上部署rhel。 – ssj3892414
靜態鏈接需要您需要的'glibc-static'和其他靜態庫檔案。如果您沒有靜態庫存檔,則無法鏈接靜態。 – alvits