簡體   English   中英

如何在內部使用C ++異常並可以在較舊平台上運行的linux x64上創建共享庫對象?

[英]How to create a shared library object on linux x64 which internally uses C++ exceptions and can run on older platforms?

如何在一個Linux x64(例如Red Hat 7.x)平台上創建內部使用C ++異常(沒有跨越.so邊界的異常)的基於C ++的共享庫,並使其能夠在其他平台上運行哪些與共享庫ABI兼容(例如Red Hat 5.x或Red Hat 8.x)?

.so不使用C ++標准庫(除外),但是在內部使用C ++異常。 它的外部API僅是C,所有異常都被捕獲在內部(為了安全起見,請使用“ catch(...)”)。

現在的經驗是,盡管在GLIBC中進行了版本控制,但是使用GCC 4.7.2構建並由主程序通過dlopen加載的.so確實可以在具有2.12版本的libc.so.6等的系統上運行,但是不能在具有以下版本的系統上運行在版本2.5中,引發異常時會發生奇怪的abort()和terminate()調用。

.so使用“ -fabi-version = 2”進行編譯。 在任何平台上都不會發生鏈接器/加載器錯誤。

所以我的問題是如何完成構建可在較舊平台上運行的.so的任務? 一定有可能。

在Linux上, libstdc++libgcc_s g++鏈接到您的可執行文件和共享庫。

我會嘗試使用-static-libgcc-static-libstdc++將它們靜態鏈接到共享庫中。 然后檢查ldd my.so輸出,以確保您的共享庫未鏈接不需要的.so

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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