hidden symbol ... is referenced by DSO


在Linux上編譯Qt的時候configure出來的Makefile傳遞給g++的參數visiblility=hidden,然后就會調用Qt庫所使用的第三方庫libpng庫源代碼函數聲明添加上__attribute__ ((visibility("hidden"))),這個函數我這里是png_set_filter

這個gcc擴張的意思就是把編譯出來的函數符號設為隱藏,Qt設計者的意圖是想不讓其他外部庫鏈接使用這個libpng,只給Qt自己使用。這就造成了項目使用的第三方庫ImageMagick因為本身也用到了libpng,可能也去引用了png_set_filter也去鏈接這個函數符號,這個函數符號本身是設置為“不可見”的,一旦外部庫一引用,所以就報錯了。

如果要流氓式的解決問題,可以在函數聲明前面加上:

 

__attribute__ ((visibility("default")))

這樣,函數符號就被“導出”了,當然,與windows上DLL的導出表不一樣。

 

 

references:

https://gcc.gnu.org/wiki/Visibility

http://blog.csdn.net/xiayu0912/article/details/6236724

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM