
我使用C++11功能編寫了一個共享庫,用gcc 4.8、libc 2.18編譯,需要在客戶端的CentOS 6機器上運行,該機器有gcc 4.4.7、libc 2.12。這個函式庫中有一些符號在libc 2.12 中找不到,那麼我如何在CentOS 6 上使用這個函式庫。客戶端上使用CentOS 6,其中的軟體包不能被觸及。在 CentOS 6 上使用 DevTools-2 編譯它是否可以,或者可能有任何 ABI 相關問題。如果還有其他建議,請告訴我。提前致謝。
答案1
在與運行它的系統相同的系統上進行編譯。您可能需要重新編譯以實現發行版的版本跳轉(例如從 7 到 8),有時甚至需要重新編譯。
如果您使用不同的編譯器版本可能編譯器的共用幫助程式庫、基本 C 或 C++(最有可能)函式庫或各種外部依賴項之間會遇到不相容問題。我不想調試,這不是一團糟。
答案2
C++11 特性,使用 gcc 4.8 編譯
?為什麼不是 g++ 4.8 ?
建議:使用 libstdc++.a 靜態編譯你的函式庫 → 我認為 C++11 函式位於*libstdc++-devel
,而不是 glibc 中。
devtoolset-2-libstdc++-devel-4.8.2 附帶靜態函式庫:
/opt/rh/devtoolset-2/root/usr/lib/gcc/x86_64-redhat-linux/4.8.2/{ libstdc++.a, libstdc++_nonshared.a }