zoukankan      html  css  js  c++  java
  • linux编译动态库,配置暴露的接口

    在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 ${INCLUDE} -o $@ -c $<

  • 相关阅读:
    运算符的优先级
    运算符
    值类型与引用类型的区别
    进制转换
    Java总结第二期
    Java总结第一期
    库存管理系统
    MyBank后感
    day72
    day71
  • 原文地址:https://www.cnblogs.com/limedia/p/linux_compile_gcc.html
Copyright © 2011-2022 走看看