九月 5, 2011

解决”symbol lookup error”问题

Written by

ubuntu9.10 + eclipse + CDT,开发一个Linux下的C/C++服务器程序,开发工作已经接近尾声,也就是说,之前的几个动态库引用啥的都没问题了,可有一天突然发现在编译主程序(可执行程序)时,提示:

/usr/bin/ld: cannot find -lsendclient

这是找不到sendclient.so文件导致的。

我是这样引用各个so动态库文件的:

在/etc/ld.so.conf中输入如下内容:

include /etc/ld.so.conf.d/*.conf

用于包含/etc/ld.so.conf.d/目录下的所有*.conf文件。

然后在/etc/ld.so.conf.d/目录下为每个引用到的so建立.conf文件,我用到的有好多个了,所以建了很多个文件,并在相应文件中记录so所在的目录:

analysis.conf      ==>   /home/hyh/jobman/analysis/Debug/

sendclient.conf ==> /home/hyh/jobman/sendclient/Debug/

task.conf ==> /home/hyh/jobman/task/Debug/

核实以上路径都没问题后,到sendclient项目查看其配置文件,发现原来是生成文件的名字不知道怎么被修改成了task:

改成sendclient,编译成功。

接下来问题远远没有解决。

在运行可执行程序时,居然提示说没有函数定义:

/home/hyh/jobman/loader/Debug/loader: symbol lookup error: /home/hyh/jobman/loader/Debug/loader: undefined symbol: _ZN7TaskManC1Ev

然后就退出了,是不是很奇怪?程序可以运行,却执行到new TaskMan()时找不到符号,然后退出。

这显然不会是ld的路径造成的了,着实摸不着头脑了。

用ldd看看loader.exe程序的依赖项和他们的路径:

 libUtility.so => /home/hyh/jobman/Utility/Debug/libUtility.so (0x001e5000)
libtask.so => /home/hyh/jobman/sendclient/Debug/libtask.so (0x00f95000)
libsendclient.so => /home/hyh/jobman/sendclient/Debug/libsendclient.so (0x0054f000)

……

还真有斩获:libtask.so 的路径指向了sendclient,显然是链接的时候出了问题 ,可是怎么看配置文件也没啥问题啊!!!

只能是一个个排查吧,与之相关联的就是exe程序、sendclient和task三个项目。好在浏览sendclient时发现Debug目录下面赫然显示有task.so文件存在:

这下终于真想大白了:

上一个失误在sendclient的Debug目录下面生成了一个task.so,结果在编译和链接可执行程序时eclipse自动链接了sendclient/Debug目录下的task.so,但执行的时候是按照ld.conf.d目录下的配置文件进行装载的,结果找不到相应的task.so符号文件,从而找不到task.so中的函数。

修正,重新编译并运行一下,又出现如下错误:

/home/hyh/jobman/loader/Debug/loader: error while loading shared libraries: libtask.so: cannot open shared object file: No such file or directory

这下好说了,运行“ldd loader”看看,发现:

 libUtility.so => /home/hyh/jobman/Utility/Debug/libUtility.so (0x00bf4000)
libtask.so => not found

运行 “sudo ldconfig”重新装载一下配置文件,刷新一下缓存,再次运行就OK了:

hyh@hyh-Ubuntu:~/jobman/loader/Debug$ sudo ldconfig
hyh@hyh-Ubuntu:~/jobman/loader/Debug$

Category : C/C++Linux/Unix

Tags :

Comments

33 Responses

  1. 匿名说道:

    真是汗啊我的帖子好少啊加油

  2. 匿名说道:

    晕。。。。怎么没早看到呢。。。。。。。。。

  3. 匿名说道:

    楼主天天快乐,吉祥如意!

  4. 匿名说道:

    疯了这年头盗版还真多~~~~~~

  5. 匿名说道:

    有现实中的偶在这…不佩服………….佩服电影里的….

  6. 匿名说道:

    好我骂你

  7. 匿名说道:

    朕在自己的寝宫~~~~

  8. 匿名说道:

    希望大家帮我把这个帖发给你身边的人,谢谢!

  9. 匿名说道:

    强人,佩服死了。呵呵,不错啊

  10. 匿名说道:

    楼上的稍等啦

  11. 匿名说道:

    也有啊,前天不是你也到一个很狂的贴里去了吗?

  12. 匿名说道:

    呵呵 你想就来嘛~~

  13. 匿名说道:

    呵呵~~~我的我的

  14. 匿名说道:

    是转的把,说得不错再看一次

  15. 匿名说道:

    我怎么说那?~!

  16. 匿名说道:

    要不我崇拜你?行吗?

  17. 匿名说道:

    哈哈小心被她看见哦~~~~

  18. 匿名说道:

    谢谢楼主,好久没看到这么好的贴了

  19. 匿名说道:

    超級精彩,我非常喜歡

  20. 匿名说道:

    慢慢来,呵呵

  21. 匿名说道:

    早上的时候把硬盘线重新弄了下

  22. 匿名说道:

    努力,努力,再努力!!!!!!!!!!!

  23. 匿名说道:

    照你这么说真的有道理哦呵呵不进沙子馁~~~

  24. 匿名说道:

    现在生意是越来越不好做了哦。。。。

  25. 匿名说道:

    羡慕楼主的确是很羡慕,顶一下

  26. 匿名说道:

    哇~~`你是不是投胎滴时候走错地方啦~“

  27. 匿名说道:

    一群傻逼

发表评论

电子邮件地址不会被公开。

Proudly powered by WordPress and Sweet Tech Theme