linux編譯動態庫,配置暴露的介面

2022-08-24 18:45:10 字數 507 閱讀 9695

在linux中,使用gcc進行指令碼編譯,預設情況下,會將非static的方法以及類都匯出到so中

這種特性讓我們方便使用時,有時候也會出現匯出庫的重名以及衝突。

linux的動態庫載入庫時,如果存在的就會進行覆蓋,最終形成一套函式表,這就有可能會產生部分匯出函式衝突,呼叫後崩潰的現象。

為了解決這種問題,必須對匯出的函式進行規劃,讓一部分函式變為內部符號,不進行匯出。

要做到這一點,需要做兩件事兒

1、對匯出的符號進行定義,顯示進行匯出

__attribute__((visibility ("default"))) void add(int a, int b)

使用__attribute__((visibility ("default")))來說明,這個函式需要匯出的

2、對makefile進行修改,設定預設的函式均為local

%.o:%.cpp

$(cxx)  -fvisibility=hidden -g -fpic $ -o $@ -c $<

linux 配置動態庫

一。錯誤 1.error while loading shared libraries lib so cannot open shared object 是因為在linux環境下動態庫沒有引用進去 vim etc ld.so.conf 新增要用的動態庫的目錄絕對路徑 引入x264的動態庫 引入ffm...

動態庫介面 隱蔽暴露的小技巧

最近在使用別人庫的時候,懷疑乙個介面存在問題。由於原來 是別人寫的,不知道這個介面是怎麼來的。從包含的標頭檔案中也沒有找到該介面的宣告,就納悶為什麼能夠編譯過去。後來通過nm檢視庫中的介面,查到該介面。隱蔽的方式為 1 給的標頭檔案不完整,只給出了部分 2 標頭檔案中不存在而又被使用的函式,通過先宣...

linux動態庫的編譯與使用

linux下的動態庫以.so為字尾,我也是初次在linux下使用動態庫,寫一點入門步驟,以便以後能方便使用。第一步 編寫linux程式庫 檔案1.動態庫介面檔案 動態庫介面檔案getmaxlen.h ifndef getmaxlen h define getmaxlen h int getmaxle...