我有一個應用程序,其中包含用作插件編寫器的C++接口的一部分的STL對象。共享庫與其接口中的STL對象的GCC兼容性
我知道兼容性的最佳選擇是使用C接口,但目前不可行。
我知道在libstdC++中從GCC 3.4到4.8的所有內容在ABI方面都是高度兼容的。例如,如果我使用GCC 4.1進行編譯,並且插件供應商編寫使用GCC 4.7編譯的代碼,那麼除非出現轉角情況,否則所有將在符合GCC 4.7或更高版本的libstdC++版本的平臺上運行良好, 提供的STL使用僅限於.so內部,並且外部.so界面使用純C,但遺憾的是我不是這種情況。
所以,我很好奇關於用作插件接口一部分的STL類的情況。我可以安全地在未使用相同編譯器版本(例如4.1和4.8)編譯的共享對象之間傳遞STL對象嗎?如果人們使用不同的編譯器選項,有什麼需要注意的是如何編譯和解決模板問題?
我懷疑它會有問題。但是,GCC人員可能會以某種方式完成這項工作,因此可能會出現符號版本化魔法。
對於這個問題,我只對Pre-C++ 11編譯和鏈接感興趣。我也只對使用GCC的Linux和Mac OS X感興趣。
除非人們不想讓自己失敗,否則它應該工作得很好。 –
@marc感謝您的反饋。任何機會,你可以提供一個參考或鏈接進入這個更詳細一點(或者可能是依賴於此的項目)? – Rob
雖然它不一定適用於gcc> = 5.0,因爲它們[改變了它們的ABI](https://gcc.gnu.org/onlinedocs/libstdc++/manual/using_dual_abi.html) – Walter