通常有两种方法:
1.把动态库放到系统库或者在系统库中做一个链接,这样编译和运行都会去系统库找。这样容易引起系统库混乱。
2.export LD_LIBRARY_PATH=###。指定库搜索路径,但是这样注销再登陆就没了。
还有第三种方法,编译时使用-Wl,-rpath,-Wl,路径
这样就能把路径编译到可执行文件里,但是这样只能在本地使用,拿到其他地方就需要把库和路径也拷贝过去才行。但是这在调试我们程序时还是非常实用的,特别是在系统库里存在同一库的不同版本时。
下面是我写的一个小例子:
#vim libtest.c
#include <stdio.h>
int add_fun(int a,int b)
{
return a+b;
}
#gcc -fPIC -shared -o libtest.so libtest.c
#vim main.c
#include <stdio.h>
int main()
{
int a,b,sum;
a = 1028;
b = 23409;
sum = sum_fun(a,b);
printf("sum = %d\n",sum);
return 0;
}
#gcc main.c -o main.o -Wl,-rpath,-Wl /home/hb/test/lib/libtest.so
# ldd main.o
linux-gate.so.1 => (0x00b0c000)
/home/hb/test/test/lib/libtest.so (0x00eae000)
libc.so.6 => /lib/libc.so.6 (0x005cc000)
/lib/ld-linux.so.2 (0x004b7000)
这时可以看到,libtest.so的路径直接写进了可执行文件
这样执行时就不会去系统库里找找个文件了