红联Linux门户
Linux帮助

Linux动态库搜索路径优先级问题

发布时间:2008-05-05 21:08:39来源:红联作者:zisxvdmc
作者:Ronnie 手机:13761598350 E-mail:ghnghnghnghn@163.com

一般来说,Linux动态库的默认搜索路径是/lib和/usr/lib。创建完动态库后,一般都会将创建出来的动态库复制到这两个目录中。在执行应用程序时,系统会去这两个路径下调用动态库。但其实,动态库的搜索路径除了这两种方法去指定以外,还有另外两种方法:编辑配置文件和指定环境变量。但是这四种搜索路径的优先级又各不相同。

我们先在同级目录下建立三个文件tlib.h:

#ifndef __TLIB_
#define __TLIB_

void fun(void);

#endif

tlib.c:

#include
#include “tlib.h”

void fun()
{
printf(“This is a test\n”);
}

以及test.c:

#include
#include “tlib.h”

int main()
{
fun();
return 0;
}

总的来说,无论使用哪种方法去指定动态库的搜索路径,都少不了这几步:

①gcc -fPIC -Wall -c tlib.c 生成.o文件

②gcc -shared -fPCI -o libtlib.so tlib.o 生成动态库

③gcc -o test test.c -L. -ltlib 生成可执行文件

这里要注意一点,动态库文件名必须以lib开头。

下面就把这四种方法一一作一下说明:

为了测试起来更直观,我们可以在做每一种方法之前把tlib.c里面fun函数打印的内容变换一下,然后再做上面的第①至第③步。

方法一:
在配置文件/etc/ld.so.conf里添加动态库所在的路径,编辑完后在命令行输入ldconfig。

方法二:
指定环境变量 export LD_LIBRARY_PATH=[动态库所在的路径]。

方法三:
把动态库拷贝到/usr/lib目录下。

方法四:
把动态库拷贝到/lib目录下。

经过测试,可知动态库搜索路径优先级从高到低依次是:方法二,方法一,方法四,方法三。
文章评论

共有 0 条评论