linux动态库调用优先级,Linux动态库搜索路径优先级问题 第二个人的理解

Linux动态库搜索路径优先级问题 第二个人的理解

发布时间:2008-05-05 21:09:39来源:红联作者:zisxvdmc

作者:annight E-mail:annightzhao@gmail.com

5月5日

今天学习LINUX的动态库的搜索优先级

当运行GCC,将先把程序经过编译器生成 .o文件,该文件不能直接运行,需再次生成可执行文件,才可被系统运行。如果程序中涉及到调用库函数时候,这时候就分调用静态库(.o)和调用动态库(.so)两种情况了,一般来说静态库可直接调用,调用方便,但需要调用库文件的函数都要调用一个库函数,这就使该程序占用大量内存空间(如果该程序有很多函数需要调用库函数),而动态库需要指定路径(系统运行程序时将会搜索库函数),但所有需要调用库的函数这时共用一个库函数。

Linux动态库的默认搜索路径是/lib和/usr/lib,动态库被创建后,一般都复制到这两个目录中。当程序执行时需要某动态库,并且该动态库还未加载到内存中,则系统会自动到这两个默认搜索路径中去查找相应的动态库文件,然后加载该文件到内存中,这样程序就可以使用该动态库中的函数,以及该动态库的其它资源了

今天学习动态库有几种指定路径(几种搜索方式),了解他们之间的优先级,具体方法是将4个不同文件库指定不同路径,他们共同被一个程序调用,由于搜索的优先级别将会调用不同的库函数。

LINUX的动态库一般有4种搜索方式(按优先级高--->低):

我们先建立几个文件:

1.接口:tlib.h

#ifndef __tlib_h

#define __tlib_h

void test(void);

#endif

2.tlib.c

#include "tlib.h"

#include

void test()

{

printf("This is test(1,2,3,4)\n");

}

3.执行程序:test.c

#include

#include "tlib.h"

int main()

{

test();

return 0;

}

1.通过环境变量LD_LIBRARY_PATH指定动态库搜索路径。

通过设定环境变量LD_LIBRARY_PATH也可以指定动态库搜索路径。当通过该环境变量指定多个动态库搜索路径时,路径之间用冒号":"分隔。具体方法如下:

gcc -fPIC -wall -g -c tlib.c

gcc -shared -fPIC -o libtlib.so tlib.o(注意生成的动态库函数必须是lib打头)

gcc -o test test.c -L. -ltlib (L参数是指动态库存放地 .是指当前路径下;l参数是表示动态库名字,这里的tlib 是将libtlib的前头lib去掉)

export LD_LIBRARY_PATH=/~(~是指你存放.h文件的路径)

2.在配置文件/etc/ld.so.conf中指定动态库搜索路径。

gcc -fPIC -wall -g -c tlib.c

gcc -shared -fPIC -o libtlib.so tlib.o

gcc -o test test2.c -L. -ltlib

打开/etc/ld.so.conf 文件并将你存放.h文件的路径加入。Ldconfig (是将你修改的配置文件保存导入)

3.将动态库放入/lib中

gcc -fPIC -wall -g -c tlib.c

gcc -shared -fPIC -o libtlib.so tlib.o

gcc -o test test3.c -L. -ltlib

mv libtlib.so /lib

4. 将动态库放入/usr/lib中

gcc -fPIC -wall -g -c tlib.c

gcc -shared -fPIC -o libtlib.so tlib.o

gcc -o test test4.c -L. -ltlib

mv libtlib.so /usr/lib

最后运行test文件将得出test1, 为了测试,第二步将全局变量取消,然后运行test文件将得出test2,依次类推,大家自己想想

有些想法可能不对,请大家多指教

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值