以下是我之前關於How to safely deploy an application built with an upgraded compiler的問題,我仍然對C++ 11功能的兼容性有疑問。使用devtoolset-2,將使用gcc 4.8.2構建但與libstdC++。so.6.0.13鏈接的應用程序將支持完整的C++ 11功能,或僅支持使用libstdC++ 6.0.19的常用設置。C++ 11功能兼容不同版本的GCC
我真的不確定要真正理解這一點。
以下是我之前關於How to safely deploy an application built with an upgraded compiler的問題,我仍然對C++ 11功能的兼容性有疑問。使用devtoolset-2,將使用gcc 4.8.2構建但與libstdC++。so.6.0.13鏈接的應用程序將支持完整的C++ 11功能,或僅支持使用libstdC++ 6.0.19的常用設置。C++ 11功能兼容不同版本的GCC
我真的不確定要真正理解這一點。
你不應該像這樣混合libstdC++,所以這是一個有爭議的問題。您應該重新分配devtoolset-2附帶的libstdC++並針對該特性進行鏈接。否則編譯器和標準庫會相互衝突,甚至他們不會知道你的問題的答案!然後,只需查看GCC 4.8.2中支持哪些C++ 11功能的列表即可。
實際上,我明白在使用由RedHat提供的devtoolset-2(但我使用centos版本)的libstdC++之間沒有混合來升級編譯器並仍然使用系統libstdC++。因此,該應用程序是使用相同版本的libstdC++(6.0.13)構建和運行的。 GCC 4.8應該與libstdC++ 6.0.13向後兼容,但我會問C++ 11的功能支持。 – Scab
@Scab:我看不出libstdC++如何無條件向後兼容。 'std :: thread'支持來自哪裏?在容器中移動語義?標準庫中的所有其他C++ 11功能?也許GCC開發者已經設法使新編譯器總是可以使用舊標準庫實現,但是我想答案是「你只是不知道你會得到什麼」。因此我會避免它。 –
根據這個https://gcc.gnu.org/onlinedocs/libstdc++/manual/abi.html,我明白一些版本的GCC與舊的libdstC++版本兼容,特別是如果次要版本號只有一個變化(如6.0.13和6.0.19)。如果有任何疑問,那麼爲什麼紅帽發佈了他們的devtoolset集合?所以如果我需要C++ 11完全支持centos 6.7我該怎麼辦?使用gcc 4.8.3,它是libstdC++ 6.0.19版本?所以當在centos 6.7上部署應用程序時,還要部署所有與libc,libgcc_s版本相關的依賴項? – Scab
忘掉C++ 11。您只能期望由給定編譯器編譯的C++代碼只能與該編譯器的相應庫鏈接。不能保證你可以用給定版本的編譯器編譯你的代碼,將它與舊版本的庫鏈接起來,並期望任何工作。 –
好吧,那麼如何使用devtoolset-2呢?在這種情況下它變得毫無用處。 – Scab