码迷,mamicode.com
首页 > 编程语言 > 详细

窥探C语言程序的编译、链接

时间:2018-12-09 14:15:05      阅读:153      评论:0      收藏:0      [点我收藏+]

标签:问题   info   处理   函数库   项目   bash   分享   png   src   

C语言程序的编译和链接

C语言程序从源文件到生成可执行程序需要经过编译器的预处理,汇编、编译、链接。这里简化为编译、链接两个阶段

编译:对源文件语法做检查
链接:会查找函数的具体实现并把项目中所有相关的.o目标文件、C语言函数库合并在一起生成可执行文件

我来编写一个main.c

技术分享图片

对main.c进行编译,可以用clang或者gcc编译器都可以

$gcc -c main.c
$clang -c main.c

一旦执行编译你会发现,编译通过了,编译器只是提示一个警告
技术分享图片

警告只是告诉main.c调用sum函数没有函数声明,那我们添加sum函数声明再次编译

技术分享图片

perfect!编译完美通过,生成目标文件main.o

接着问题就来了,mian.c根本就没有sum函数定义,怎么就可以编译通过呢? 编译只是检查语法,main.c中调用sum函数并且有函数声明就没有语法问题,编译自然可以通过。

接下来你想生成可执行程序还差一步链接的操作

$gcc main.o -o main
$clang main.o -o main

技术分享图片

报错是因为找不到main.c中的调用sum函数的定义,链接失败。 由此证明链接会查找该文件调用所有函数的定义

技术分享图片

这次就完美了,可以编译器、链接一起来

$gcc main.c -o main
$clang main.c -o main

编译链接通过,输出执行结果21

技术分享图片

C语言程序的多文件开发

上面main.c调用了函数sum,在企业开发中是分文件开发,现在模拟一个场景。
A负责编写main.c, B负责编写Math.c(数学运算的一些函数)提供给A调用。

技术分享图片

窥探C语言程序的编译、链接

标签:问题   info   处理   函数库   项目   bash   分享   png   src   

原文地址:https://www.cnblogs.com/CoderHong/p/10090667.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!