GCC 编译动态库 so文件时,静态链接libmysqlclient.a 与动态链接参数一起使用问题。

转载自:https://blog.csdn.net/toontong/article/details/79077476

直接放结论, 下面是编译一个使用了mysql C API 的 mysql.so 文件(我们的业务中,它是zbx加裁的modules so文件)

gcc -fPIC -shared -o mysql.so mysql.c \
  -I/usr/include/mysql \
  -L/usr/lib64/mysql \
  -Wl,-Bstatic -lmysqlclient \
  -Wl,-Wl,-Bdynamic -lssl -lgcc_s -lm  -lrt

解释:
-fPIC -shared 参数 一般是一起使用使用,编译so文件用,其不能直接与 -static 参数混用。
-Wl,-Bstatic 使用这个参数,后面接的 -l{库名称} 就是使用静态链接。
-Wl,-Bdynamic 同理,后续的-l 就是动态链接。
排查方法:
先使用全动态编译编译出所需要 的so文件,使用ldd命令查看其依赖了哪些动态库(与路径)。
由于 libmysqlclient_xx.so 中的经常有版本号(5.6=18, 5.7=20)问题,所以使用静态链接能免除此问题。
没版本问题与路径不一致问题的的so依赖文件,就可以使用动态链接。
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值