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$
真是汗啊我的帖子好少啊加油
晕。。。。怎么没早看到呢。。。。。。。。。
楼主天天快乐,吉祥如意!
疯了这年头盗版还真多~~~~~~
有现实中的偶在这…不佩服………….佩服电影里的….
好我骂你
And I thought I was the sensible one. Thanks for setting me strhtgai.
朕在自己的寝宫~~~~
希望大家帮我把这个帖发给你身边的人,谢谢!
强人,佩服死了。呵呵,不错啊
Thnkas for taking the time to post. It’s lifted the level of debate
楼上的稍等啦
也有啊,前天不是你也到一个很狂的贴里去了吗?
呵呵 你想就来嘛~~
呵呵~~~我的我的
是转的把,说得不错再看一次
Your hotnsey is like a beacon
我怎么说那?~!
要不我崇拜你?行吗?
Haeullljah! I needed this-you’re my savior.
哈哈小心被她看见哦~~~~
谢谢楼主,好久没看到这么好的贴了
超級精彩,我非常喜歡
慢慢来,呵呵
早上的时候把硬盘线重新弄了下
Thanks for inudrotcing a little rationality into this debate.
努力,努力,再努力!!!!!!!!!!!
照你这么说真的有道理哦呵呵不进沙子馁~~~
现在生意是越来越不好做了哦。。。。
羡慕楼主的确是很羡慕,顶一下
Great post with lots of impnotart stuff.
哇~~`你是不是投胎滴时候走错地方啦~“
一群傻逼