美文网首页
编译琐事

编译琐事

作者: 啊呀哟嘿 | 来源:发表于2020-04-08 16:29 被阅读0次
  • 当编译一个可执行文件时,如果声明了一个函数却没有定义,则:
    • 假如代码用到了这个函数,会报错:undefine reference
    • 假如代码没用到这个函数,不会报错,但编译后的结果的符号表里不含这个函数的符号。
  • 对于静态库和动态库,如果声明了一个函数却没有定义,则无论代码是否用到了这个函数,都不会报错,但编译后的结果的符号表里该符号为"U"(未定义);对于动态库,可以使用-Wl,--no-undefined选项让链接阶段强制保证所有的符号都是定义的。
  • 当编译可执行文件时,如果可执行文件用到了动态库中定义的函数,如果连接的过程中找到了相关的定义,则能够正常编译,但是符号表里会标记为"U";如果没有找到,则会报错,终止编译。
  • 静态库只是目标文件的集合。
  • 编译静态库时没有链接的过程,因而静态库不包含它的依赖。
  • 动态库只能依赖使用-fPIC选项编译的静态库,链接过程会将其链接进本身。
  • PIC(Position Indepedent Code)会产生地址无关符号表,方便动态库被动态加载和复用。
  • 动态库依赖动态库时,并不会将其链接进本身。
  • 动态库编译时的搜索顺序,运行时的搜索顺序。
  • 预处理器对include的搜索顺序。(可以在预处理时使用-v选项查看)
  • 交叉编译工具链。
  • 交叉编译的SYSROOT是为了营造一个目标环境的文件系统,通常会有$SYSROOT/usr等路径。
  • 对于CMAKE来说,应当为交叉编译相关的选项建立toolchain文件,并通过CMAKE_TOOLCHAIN_FILE选项传入。
  • 交叉编译时有CMAKE_FIND_ROOT_PATH变量,是用于find_*命令,同时可以用CMAKE_FIND_ROOT_PATH_MODE_*来控制为ONLY还是NEVER级别。
  • 应用程序二进制接口ABI的概念。
  • 嵌入式应用程序二进制接口EABI的概念。
  • 使用不同的编译器编译出来的静态库一定不能通用,动态库可能能通用。

相关文章

  • 编译琐事

    当编译一个可执行文件时,如果声明了一个函数却没有定义,则:假如代码用到了这个函数,会报错:undefine ref...

  • 琐事,琐事。

    所有的离婚究其原因都没什么大事,都是生活中的琐事,正验证了那句话,一个人不能够到达遥远目标,不是因为她没有力气,不...

  • 琐事引发的琐事

    很多事情,很多时候 我都很难去写完一件事情 不是那个从小得小红花 文章只要语文课就必被读到的小学 初中 高中 时代...

  • 家庭琐事不是琐事

    一天,我从田地里急急忙忙回家拿工具,拐进小巷子时,咣当与里面出来的自行车相撞了。 骑自行车的人,站起来后...

  • 琐事,琐事,被赶跑

    7月20号提交完专业英语的论文,假期就开始了。 之前导师一直没有联系我们,想来他也知道在家的学习效率不怎么样,但九...

  • 「MySQL高级篇」MySQL锁机制&事务

    引言 锁锁锁,到哪到离不开这桩琐事,并发琐事,redis琐事,如今是MySQL琐事,这其中琐事,还跟MySQL另一...

  • 琐事

    2018年5月20日 星期一 多云 一天的开始是从闹钟开始的,当然我今天很早就醒了,六点十六,我还是想睡着。...

  • 琐事

    我一个人坐在窗边,不是抬头看看窗外,就是低头写作,或是看看电影和书了。当然,除了这些每天必行的外,再就是打开酷狗,...

  • 琐事

    悄悄是别离的笙箫,沉默是今晚的康桥! 小到短期旅行,远赴出差;大到下海经商,留学深造。我们都会与亲人朋友分...

  • 琐事

    最近在忙着期末备考,也没有写文章,今天才休息到:哦,今天14号了,该交作业了。临时也没有什么好的话题,就说说我最近...

网友评论

      本文标题:编译琐事

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