您的位置:首页 > 数据库 > MySQL

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

2018-01-16 17:44 836 查看
直接放结论, 下面是编译一个使用了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依赖文件,就可以使用动态链接。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: