[工程构建][gcc] 关于链接

这两个命令都是服务于链接时的库加载( 动态库.so  静态库.a)

但是他们的作用是迥然不同的:-L和-I一样,用来指定搜索路径,-l则是用来指定链接时需要链接的库的名字

生成静态库:gcc -o func1.o func1,c

                    gcc -o func2.o func2.c

                    ar -rcs libfunc.a func1.o func2.o

生成动态库:gcc -o func1.o func1.c

                    gcc -o func2.o func2.c

                    gcc -shared -fPIC -o libfunc.so func1.o func2.o

-l    :    仅在/lib  /usr/lib  和  /usr/local/lib 目录下查找。

                比如: gcc  -o 1 1.c -lfunc        (假设libfunc.a或者libfunc.so文件在上面三个目录中的任意一个中)

-L   :    指定库文件的搜索目录

                比如 : gcc -o 1 1.c -L./ -lfunc     (假设libfunc.a或者libfunc.so文件在当前目录下)

tips:

1.如果动态库和静态库同名且都可被搜索到,那么如果不适用-static选项,默认优先使用动态库

        强制使用静态库:gcc -o 1 1.c -static -lfunc

2.对于动态库,libtest.so库只是在目标程序里做了标记,在运行程序时才会动态加载,那么从哪加载呢?

加载目录会由/etc/ld.so.conf来指定,一般默认是/lib、/usr/lib,所以要想让动态库顺利加载,你可以将库文件copy到上面的两个目录下,或者设置export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/XXX/YYY,后面为你自己动态库的目录,再或者修改/etc/ld.so.conf文件,把库所在的路径加到文件末尾,并执行ldconfig刷新。这样,加入的目录下的所有库文件都可见。

另外还有个文件需要了解/etc/ld.so.cache,里面保存了常用的动态函数库,且会先把他们加载到内存中,因为内存的访问速度远远大于硬盘的访问速度,这样可以提高软件加载动态函数库的速度了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值