zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    makefile中宏定义
    make的静态模式
    makefile中两重if判断
    定义命令包
    嵌套执行make
    AcWing 1014. 登山
    AcWing 482. 合唱队形
    AcWing 1027. 方格取数
    AcWing 1016. 最大上升子序列和
    AcWing 187. 导弹防御系统
  • 原文地址:https://www.cnblogs.com/foohack/p/4089753.html
Copyright © 2011-2022 走看看