[英]Forcing G++ (GCC) to a specific libstdc++ version (GLIBCXX_*)
我正在嘗試使用GCC 4.9.0構建一個與libstdc++
向后兼容的二進制文件。 根據GCC的ABI策略和指南以及控制C ++方言的選項,命令行選項-fabi-version
應該可以解決問題; 但是,無論我設置哪個版本,我仍然可以從更新的版本導入符號,如下所示:
$ objdump -T binary | grep GLIBCXX_3.4.20
00000000 DF *UND* 00000000 GLIBCXX_3.4.20 _ZSt24__throw_out_of_range_fmtPKcz
我已經嘗試-fabi-version=1
到-fabi-version=5
(ABI版本5對應於GCC 4.6,它保證存在於目標系統上),但是這些導入會在結果文件中逐漸-fabi-version=5
。
我該如何解決? 由於其他原因,回到舊的GCC版本不是我的選擇。
命令行選項
-fabi-version
應該可以解決問題
不,這與你想要的完全無關。 該選項會影響編譯器生成的代碼,但這並不意味着您可以鏈接到舊版本的libstdc ++(這是為了根據較新的libstdc ++中的符號停止所需的)。
您無法使用新的GCC鏈接到較舊的libstdc ++。 libstdc ++的版本與GCC的版本緊密耦合,因此如果要鏈接到較舊的libstdc ++,則需要使用較舊的GCC進行編譯。
你不能告訴libstdc ++不使用新符號,它依賴於它們的原因是因為它需要它們。 使用較舊的libstdc ++。
由於其他原因,回到舊的GCC版本不是我的選擇。
然后你被搞砸了。
您需要使用較舊的GCC,或者不能動態鏈接到libstdc++.so
。
在Red Hat Enterprise Linux或CentOS上,您可以選擇使用Developer Toolset中較新的GCC,避免鏈接到新的libstdc++.so
只能與系統GCC兼容,GCC 4.4適用於RHEL6或GCC 4.7適用於RHEL7。 您不能使用它與GCC 4.6兼容。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.