美文网首页
编译问题小结

编译问题小结

作者: 豆腐幹 | 来源:发表于2017-07-06 20:02 被阅读0次

遇到undefine reference问题

问题:我遇到的这个问题的起因是由于,在Makefile中链接处静态链接库顺序放置不正确导致的。
因为链接库之间也可能有引用关系,g++链接时是从后往前寻找外部符号,所以说越底层的库应该放在越后面。
例如

g++ …… -o ./bin/exe  *.o -la -lb

如果b对a有引用,则会发生undefine reference错误。
这时应该调整为

g++ …… -o ./bin/exe  *.o -lb -la

当遇到不清楚各个库之间的引用关系是怎么办?

遇到这种情况可以根据报错信息,和nm命令确定库中的函数的关系。
例如报错

(.text+0x13): undefined reference to `func'

我们如果有多个.a文件,不知道究竟是哪些库导致的问题,这是可以利用linux命令 nm

nm -A ../../*.a |grep func

-A代表库文件名与函数所在行一起输出,方便确认输出究竟属于那个库文件。
从信息中得到函数的引用关系,再调整顺序。


Makefile写错导致的undefined reference

由于在Makefile中经常定义很多变量,看起来会有些复杂,导致有可能在Makefile中没有发现错误。但是实际编译的时候错误就显现了。
其实在执行make的时候会输出替换好的命令,这时可以其中输出的信息,查看命令是否与自己设想的相同判断是否Makefile编写错误。

相关文章

  • 编译问题小结

    遇到undefine reference问题 问题:我遇到的这个问题的起因是由于,在Makefile中链接处静态链...

  • Android编译小结

    正式开始一个新的平台,以前的项目拿到的代码都是供应商改好的,感觉有很多不规范的地方。 这次从一个全新的项目着手,严...

  • maven项目管理工具 注意事项

    maven命令小结:· compile 编译、测试、运行,A在编译时依赖B,并且在测试和运行时也依赖例如:stru...

  • 你不知道的JavaScript-上册-第四章-提升

    先有鸡还是先有蛋?什么意思 编译器再度来袭?什么意思 函数优先? 小结? 第一个问题:先有鸡还是先有蛋? 来看代码...

  • Flutter使用TabBar

    Flutter使用TabBar问题小结

  • gcc编译命令小结

    写在前面: 在几年前,我是使用c/c++作为主力开发语言。一晃几年过去,现在已投入java开发阵营。今天翻看以前的...

  • Android反编译小结

    前世之前反编译项目,一直走apktool + dex2jar + jd-gui,情况如下: 非混淆项目,没有问题;...

  • ffmpeg 编译方法小结

    ffmpeg编译 第一步 安装NDK 下载最新的NDK https://developer.android.goo...

  • iOS 编译知识小结

    简介 源码到可执行文件流程 编译器 编译流程预处理(preprocessor)词法分析(lexical anays...

  • 递归之小游戏

    问题描述 问题分析 程序实现 运行结果 小结

网友评论

      本文标题:编译问题小结

      本文链接:https://www.haomeiwen.com/subject/yxlkhxtx.html