簡體   English   中英

強制G ++(GCC)到特定的libstdc ++版本(GLIBCXX_ *)

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM