从零开始学习音视频编程技术(32) Linux篇之编译和链接

xiaoxiao2021-02-28  77

原文地址:http://blog.yundiantech.com/?log=blog&id=31

在windows下写程序的时候,通常我们所说的“编译”程序,就是直接点IDE工具上的那个运行图标,程序就运行起来了。 所以windows下开发的时候很少对程序编译的整个过程有大概的了解,对编译和链接理解的不是很透彻(至少我当初是这样的),每当看到编译器报错的时候,心就开始方了,不能迅速找出问题所在。

    在Linux写程序,可以大大加强我们在这方面的能力,深刻理解了编译和链接的意思,可以使我们快速看明白编译器报的错,因此,有必要花点时间稍微理解一下,下面我们就从一个简单的例子入手,理解一下编译和链接:

    回顾一下上节,我们使用gcc将hello.c编译成hello的命令:gcc -o hello hello.c

    这条命令就是将hello.c先编译再链接成一个可执行程序。

    下面我们写个简单的例子,将编译和链接分开:

        

首先写一个main.c,如何新建文件请查阅上文,

main.c内容如下:

1 2 3 4 5 6 7 void  myfunction();   int  main() {      myfunction();   //执行一个函数        return  0; }

main函数非常简单,就是执行了一个myfunction函数。

现在我们把它编译成main.o中间文件,命令为:

gcc  -c  main.c

执行完毕 便可以看到顺利生成了一个main.o文件,这是一个中间文件,就类似windows上的.obj文件。

细心的朋友会发现,上面我们只是声明了一个myfunction函数,函数是没有实现的。

现在我们尝试去链接它,看看会发生什么。

链接的命令为:

gcc -o   hello  main.o

执行后结果如下:

可以看到,我们期望的 myfunction函数未定义终于出现了。

这就是链接错误。

下面我们继续新建一个function.c文件,文件内容如下:

1 2 3 4 5 6 #include <stdio.h>   void  myfunction() {      printf ( "this is %s " ,__FUNCTION__); }

代码很简单,就是打印了函数名字。

继续使用gcc编译:

gcc  -c  function.c

执行完毕 便可以看到顺利生成了一个function.o文件,这同样是一个中间文件。

现在,继续将上面生成的main.o和function.o链接成可执行程序,命令如下:

gcc  -o  hello  main.o function.o

执行完毕,便生成了一个hello文件,这是一个可执行文件,可以直接运行:

到此,可以完美谢幕了!

只要理解了这个简单的例子,便能掌握编译和链接的本质了。

请牢记一句话:磨刀不误砍柴工!

音视频技术交流讨论欢迎加 QQ群 121376426

原文地址:http://blog.yundiantech.com/?log=blog&id=31

转载请注明原文地址: https://www.6miu.com/read-71957.html

最新回复(0)