簡體   English   中英

如何解決符號沖突?

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

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