前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >gcc编译之常见错误

gcc编译之常见错误

作者头像
渴望飞翔的猪
发布2022-07-17 10:46:17
1.3K0
发布2022-07-17 10:46:17
举报
文章被收录于专栏:葵花宝典007

关于gcc问题解决

最近gcc编译出来的so库之类的使用总有问题,收集资料后简单整理下解决方法:

  • 首先使用ldd 或者ldd -r XXX 查看文件所连接的so库有没有问题,目前我看到的经常是出现(undefined symbol: lua_getfield)在c中,动态库中的symbol就是函数名,所以一看到就知道是lua库没有链接导致函数找不到加上-llua即可以解决。 而c++由于允许重载,就出现同一个函数名可能对应多个实际的函数问题,于是就会有name mangling ,而且这个mangling完全没有任何规范可循,由编译器自定。解决方法:简而言之,就是用exturn “C”
  • 对于经常加载一些so时,提示undified symbol,在gcc编译时,需要把链接动态库放最后面
  • 对于编译时候找不到的so的问题,之前已经提过了,主要原因就是库文件没有导入ld(dynamic loader)检索目录中。
  • 解决方式: 1。确认库文件是否存在,比如-l123, 在/usr/lib, /usr/local/lib,或者其他自定义的lib下有无lib123.so, 如果只是存在lib123.so.1,那么可以通过ln -sv lib123.so.1 lib123.so,建立一个连接重建lib123.so. 2。检查/etc/ld.so.conf中的库文件路径是否正确,如果库文件不是使用系统路径,/usr/lib, /usr/local/lib, 那么必须在文件中加入. 3。ldconfig 重建ld.so.cache文件,ld的库文件检索目录存放文件。尤其刚刚编译安装的软件,必须运行ldconfig,才能将新安装的库文件导入ld.so.cache. 更多有关具体linux /etc/ld.so.conf 的相关信息参考动态装入器 关于gcc编译链接可参考 GCC/LD编译链接潜规则
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2017-03-16,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 关于gcc问题解决
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档