我有以下情況:用GCC混合不同的C++標準
有兩個組件,一個是用C++ 11編寫的,另一個是用C++ 98編寫的。 兩者都使用相同的GCC 4.9從頭開始編譯。一個使用隱式默認--std=gnu++98
另一個明確設置--std=c++11
。
即使做了一些研究,我也無法完全回答這個問題,如果這可能會導致問題。
的GCC wiki說:
的C++語言98 ABI是兼容的C++語言的11,但在圖書館休息兼容性好幾個地方。這使得將C++ 98對象與C++ 11對象鏈接起來非常危險。如果您可以使用該語言的匹配版本重新編譯代碼,則應該這樣做。
這表明問題是可以預料的。
所以問題是:
有沒有,如果有
--std=gnu++98
和--std=c++11
建造的兩個部件連接在一起的問題,甚至是艱難的,他們使用相同的libstdc++
和相同的編譯器(GCC 4.9)都建?請問Dual ABI支持形式GCC 5.1在這種情況下有影響嗎?
我建議只用'-std = C++ 11'(或GNU方言)構建。 –
這將是理想的,但在這種情況下,第一個組件的編譯無法在使用C++ 98更新的情況下編譯時進行編譯,並且現在無法進行更改。 – Pascal
使用'std :: string'?其次,那些打破變化的人,也許你應該對他們感到害怕:許多「休息」可能是實際的錯誤。 – Yakk