求助:关于动态连接库的连接问题。
各位大侠好!
我是一名初手做了个动态连接库的测试程序,但是有些问题请大侠解答,thanks!
这里有一个头文件:test_so.h,三个.c文件:test_a.c、test_b.c、test_c.c,我将这几个文件编译成一个动态库:libtest.so。
test_so.h:
#include <stdio.h>
#include <stdlib.h>
void test_a();
void test_b();
void test_c();
test_a.c:
#include "test_so.h"
void test_a()
{
printf("this is in test_a...n"
}
test_b.c:
#include "test_so.h"
void test_b()
{
printf("this is in test_b...n"
}
test_c.c:
#include "test_so.h"
void test_c()
{
printf("this is in test_c...n"
}
然后将这几个文件编译成一个动态库:libtest.so
$ gcc test_a.c test_b.c test_c.c -fPIC -shared -o libtest.so
产生了libtest.so文件。
接着,我通过一个程序来调用这个库里的函数。程序的源文件为:test.c。
test.c:
#include "test_so.h"
int main()
{
test_a();
test_b();
test_c();
return 0;
}
将test.c与动态库libtest.so链接生成执行文件test:
$ gcc test.c -L. -ltest -o test
最后得到了test文件,但是当我用ldd test来 执行test时,却出现了这样的结果。结果如下:
libtest.so => not found
libc.so.6 => /lib/tls/libc.so.6 (0x42000000)
/lib/ld-linux.so.2 => /lib/ld-linux.so.2 (0x40000000)
使我比较晕,求教,我应该怎么处理才能打印出我想要的结果,谢谢各位了。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(9)
用户的动态库一般存放在/usr/lib目录下
放完之后最好执行一下ldconfig,当然也可以不执行
也可以用下面的方法:
$LD_PRELOAD=你需要的库的路径 ./test
如:
$LD_PRELOAD=/home/xxx/libtest.so ./test
[ 本帖最后由 zmyspring 于 2006-9-28 15:52 编辑 ]
呵呵。
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:./
执行一下这个就ok了!呵呵。
敲./test,结果出现了。
[root@localhost test]# ./test
./test: error while loading shared libraries: libtest.so: cannot open shared object file: No such file or directory
运行test程序阿, 到程序所在目录下运行./test
我照着,做了,现在好像能连接了,不过没有打印出东西来,为什么啊?那位大哥帮帮忙!!!
好的,我试试,谢谢了。
libtest.so文件需要放在ld连接程序能够找得到的目录下,默认是/lib
在当前shell执行export LD_LIBRARY_PATH=$LD_LIBRARY_PATH;.
就是说,把libtest.so的路径(libtest.so在当前路径吧?)加到LD_LIBRARY环境变量里。
试试。。。
[ 本帖最后由 yuaiyong 于 2006-9-22 09:01 编辑 ]