编译详解

本文深入探讨了GCC编译过程中动态库和静态库的生成与使用。针对动态库,讲解了如何生成及解决动态库依赖问题;对于静态库,提到了强制使用静态库的方法,并讨论了编译时的库搜索顺序。

编译详解

GCC

动态库

生成动态库

编译
gcc –c –I /usr/dev/mysql/include test.c –o test.o

链接
gcc –L /usr/dev/mysql/lib –lmysqlclient test.o –o test

动态库依赖动态库

A. gcc blowfish_sample_yunduan.c -lssl -lcrypto -fPIC -shared -o libtest.so

B. gcc blowfish_sample_yunduan.c -fPIC -shared -o libtest.so

A编译出的SO对ssl有依赖关系,这时候如果系统没有so或者so依赖的版本不对,就会存在问题。

为了解决这个问题,采用B的编译方式,缺少的时候,去系统so中。

静态库转换为动态库

ar -x mylib.a

gcc -fPIC -shared *.o -o libauthority.so

包含c++代码

g++ -fPIC -shared *.o -o libauthority.so
静态库

强制使用静态库
gcc –L /usr/dev/mysql/lib –static –lmysqlclient test.o –o test

搜索顺序

静态库链接时搜索路径顺序:

1. ld会去找GCC命令中的参数-L
2. 再找gcc的环境变量LIBRARY_PATH
3. 再找内定目录 /lib /usr/lib /usr/local/lib 这是当初compile gcc时写在程序内的

动态链接时、执行时搜索路径顺序:

1. 编译目标代码时指定的动态库搜索路径
2. 环境变量LD_LIBRARY_PATH指定的动态库搜索路径
3. 配置文件/etc/ld.so.conf中指定的动态库搜索路径
4. 默认的动态库搜索路径/lib
5. 默认的动态库搜索路径/usr/lib

有关环境变量:
LIBRARY_PATH环境变量:指定程序静态链接库文件搜索路径
LD_LIBRARY_PATH环境变量:指定程序动态链接库文件搜索路径


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值