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 $<

 

转载于:https://www.cnblogs.com/limedia/p/linux_compile_gcc.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值