帮忙看下我对对c语言编译和链接的一点认知是否正确

buffge 2018-01-15 04:09:39
c项目 编译时候将所有预处理的东西,载入的载入,替换的替换.
然后编译所有c扩展文件.编译之后在main函数中进行运行.如果遇到要用到的函数或者类 变量常量等 就去其他已编译
好的.o文件中链接所需要的内容.链接完成后打包到一个可执行文件中exe或者out.

这是我用vs编译几次 产生的认知.我不知道是否正确.
还有我觉得链接 就是根据声明去查找已编译好的.o文件所需要的部分,然后复制到可执行文件中.
如果是<>中的声明就去系统编译器已经编译好的.o文件中查找 并复制到可执行文件中.
...全文
611 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
赵4老师 2018-01-16
  • 打赏
  • 举报
回复
为什么不参考Tiny C Compiler源代码呢?
自信男孩 2018-01-15
  • 打赏
  • 举报
回复
运行之前会编译生成一个可执行文件。这个文件已经不是之前的.o文件里。所以,运行时不是去.o文件里去找函数定义。因为.o文件还是磁盘上的,而程序运行必须在内存里,因此运行是将可执行文件加载到内存,将main需要调用到的函数也一并加载到内存。 可执行文件就是所有.o文件的一个合计,另外还包括一些库函数,当然库函数不是以函数定义的形式存放在可执行文件里,而是以动态库的形式加载到内存。
ztenv 2018-01-15
  • 打赏
  • 举报
回复
严格来说并不准确,不过开始这么理解可以。
paschen 2018-01-15
  • 打赏
  • 举报
回复
http://blog.csdn.net/shenjianxz/article/details/52130111 推荐:《程序员的自我修养——链接、装载与库》
paschen 2018-01-15
  • 打赏
  • 举报
回复
简单的说就是,在编译的时候,有些符号只有声明没有实现,编译器会记录为外部符号,链接器负责替换这些外部符号为实际地址,如果所有目标文件中找不到这些符号,则会报链接错误

69,371

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧