求助:关于动态连接库的连接问题。

发布于 2022-07-25 01:57:38 字数 2770 浏览 19 评论 9

各位大侠好!
我是一名初手做了个动态连接库的测试程序,但是有些问题请大侠解答,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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(9

把昨日还给我 2022-07-27 12:44:27

用户的动态库一般存放在/usr/lib目录下
放完之后最好执行一下ldconfig,当然也可以不执行

也可以用下面的方法:
$LD_PRELOAD=你需要的库的路径 ./test

如:
$LD_PRELOAD=/home/xxx/libtest.so ./test

[ 本帖最后由 zmyspring 于 2006-9-28 15:52 编辑 ]

奶气 2022-07-27 12:04:43

呵呵。

你穿错了嫁妆 2022-07-27 11:56:06

export  LD_LIBRARY_PATH=$LD_LIBRARY_PATH:./
执行一下这个就ok了!呵呵。

绝對不後悔。 2022-07-27 11:44:20

敲./test,结果出现了。
[root@localhost test]# ./test
./test: error while loading shared libraries: libtest.so: cannot open shared object file: No such file or directory

比忠 2022-07-26 20:50:04

运行test程序阿,  到程序所在目录下运行./test

神魇的王 2022-07-26 09:24:27

我照着,做了,现在好像能连接了,不过没有打印出东西来,为什么啊?那位大哥帮帮忙!!!

东风软 2022-07-25 22:00:50

好的,我试试,谢谢了。

寂寞花火° 2022-07-25 06:19:50

libtest.so文件需要放在ld连接程序能够找得到的目录下,默认是/lib

太阳哥哥 2022-07-25 02:54:33

在当前shell执行export  LD_LIBRARY_PATH=$LD_LIBRARY_PATH;.
就是说,把libtest.so的路径(libtest.so在当前路径吧?)加到LD_LIBRARY环境变量里。
试试。。。

[ 本帖最后由 yuaiyong 于 2006-9-22 09:01 编辑 ]

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文