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

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值