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

本文介绍了一种使用GCC编译带有mysqlCAPI的mysql.so文件的方法,并解释了编译选项的作用,包括如何处理静态和动态链接的问题。文章还提供了一个具体的排查流程,帮助读者解决依赖库版本和路径不一致的问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

直接放结论, 下面是编译一个使用了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、付费专栏及课程。

余额充值