linux下so包含函式名衝突解決

2021-10-16 19:48:06 字數 494 閱讀 3160

乙個專案可能包含多個so,但是不同的so中可能包含相同的函式名。

在編譯和連線的時候不會報錯,但是在執行的時候可能會出現莫名其妙的錯誤,多是段錯誤。

1、修改函式名(費時費力)

2、隱藏so中的函式

最穩妥的辦法:

cflag 加上 -fvisibility=hidden

要匯出的函式加上attribute((visibility(「default」)))

舉例:int rtprtcpinit()attribute((visibility(「default」)));

classattribute((visibility(「default」))) nrengine

-fvisibility=hidden 只在鏈結時傳入的.c檔案起作用,對.o檔案不其作用

需要在編譯cpp的工程加,例如so引用lib,需要在編譯lib的地方加

linux 下 動態鏈結庫 so 之間的符號衝突

在 linux 下編寫動態鏈結庫程式,需要注意 dll 之間的符號衝突。當我們鏈結庫需要提供給很多方整合使用,需要面對複雜的整合環境,其中乙個大問題就是與第三方整合環境的符號衝突。這些衝突有些不是通過嚴格控制名字空間解決的,比如當我們使用了一些開源庫,我們不清楚第三方整合環境有沒有這些庫,即使有是不...

linux下構建 共享函式庫( so)

在linux上用c建立共享庫so 1 建立math1.c,在命令列中輸入 nano math1.c int add int x,int y 2 編譯生成共享庫libmath1.so gcc fpic shared olibmath1.so math1.c 3 建立測試程式testmath.c,在命令...

防止Linux庫so中的介面衝突

使用vs編譯so庫,很多復用的cpp檔案在不同的so中,呼叫這些so的時候會有崩潰等等各種問題,就是因為雖然復用了介面,但是內部實現不完全相同,而linux使用介面又與windows不一樣,導致不是理想狀態使用自己庫中的函式介面,乙個簡單的解決辦法,使用顯示指定介面 wl,retain symbol...