linux下link错误undefined reference’dlclose’

作者: NickYang 分类: 技术文章,程序开发 发布时间: 2013-12-03 22:15

最近因为换了工作,服务器是在linux环境下,又开始捣鼓linux了,与同事两天的奋战中,发现差不多可以写一本《某哥的linux私房菜》了,开个玩笑。

对于linux我持中立态度,而且我认为linux这么多年发展比较慢的原因是因为桌面化做的不好或者不够好,所以我比较偏爱ubuntu。

由于以前项目是makefile的,我个人不是很喜欢makefile,因为他看起来比较费劲,而且编译完成后出现问题调试是个大难题,不是每个人都精通gdb,而且vi上手比较难。所以将工程转为codeblocks的cbp,本来想使用cmake的,但是觉得要写的比较多,于是作罢,毕竟代码不是跨平台的,windows下没法用。

编译完link的时候,报了一句undefined reference’dlclose@xxx函数‘,不知道什么问题了,找主程过来看了下,说是dl库没有包进去,查了下dl库是用来做动态库加载的(dynamic load),项目用到了libmysqld.so,加了之后还是有问题,将-ldl链接选项改到最后才可以

 

总结了下这些比较常见的undefined reference问题:

1.dl库

undefined reference to ‘dlerror’
undefined reference to ‘dlopen’
undefined reference to ‘dlerror’

增加-ldl链接选项 (-l是链接选项的前缀)

2.pthread库

undefined reference to ‘pthread_create’

undefined reference to ‘pthread_xxxx

增加-lpthread链接选项

3.rt库

undefined reference to `clock_gettime’

增加-lrt链接选项

 

如果是使用codeblocks,可以再link option里加,不过因为依赖顺序的问题,如果link option里加了还是报错,直接在link file里添加pthread dl rt等即可

如果是你自己的库出现这undefined reference什么函数,先去查下库的源代码,看看具体问题。

如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!

4条评论
  • skycpp

    2014 年 1 月 10 日 09:52

    automake 不错

    潜水 Chrome浏览器 Windows 7 x64 Edition
  • Yu

    2013 年 12 月 7 日 21:17

    其实makefile如果不打算写的话,cmake也很好用的,如果只是想要起个工程,cmake的需要写的文件并不怎么多的.
    关于编辑器不习惯,可以考虑使用gedit,加上各种插件也是很好用的
    gdb如果不能适应,可以考虑前端.我的fedora,rh系列下,使用的是insight,内部基于的是gdb,加上参数-g就可以很好的调试了.其他发行版应该也有这类东西的.

    神话 Chrome浏览器 Windows 8.1 x64 Edition
    1. eliteYang

      2013 年 12 月 7 日 22:07

      嗯,回头试一下吧,cmake写的是不太多,一个工程写出来之后,后面的基本就是拷贝了。其实是被VS惯坏了,而且长期不在linux环境下工作,有点不适应!感谢提供方法,后面我会试试这些的。

      神话 Chrome浏览器 Windows 7
  • Pingback: linux下link错误undefined reference’dlclose’ | MultiProcess

发表评论

电子邮件地址不会被公开。 必填项已用*标注