[英]How to resolve confilct of symbols?
我有一個具有類MyClass
的庫libA.so
,也有一個具有名稱MyClass
類的庫libB.so
這些類僅用於庫中。 首先我的程序加載libA.so
然后libB.so
。
問題是libB.so
使用libA.so
MyClass
,但必須使用其自己的MyClass
。
如何解決問題,而無需重命名或使用名稱空間?
g ++版本是5.4.0
通過動態鏈接,可以使用鏈接器版本腳本來限制從庫中導出哪些符號。 如果確保所有沖突的符號都是本地的(或隱藏的,有時也稱為隱藏符號),那么沖突就消失了,因為符號嚴格位於庫內部。
無論如何,以這種方式管理符號可見性是一個好習慣,並且它也可以減少程序加載時間,因為動態鏈接程序必須處理更少的符號。
需要使用標志-fvisibility=hidden
並標記應由__attribute__ ((visibility ("default")))
導出的函數和類。
標記應由__attribute__ ((visibility ("hidden")))
函數和類。
例如:
#define LIB_EXPORT __attribute__((visibility ("default")))
class LIB_EXPORT MyClass
{
//realisation
};
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.