从零开始学习音视频编程技术(32) Linux篇之编译和链接
时间:2017年06月06日 人气:...


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

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

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

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

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

        

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

main.c内容如下:

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文件,文件内容如下:


#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文件,这是一个可执行文件,可以直接运行:

到此,可以完美谢幕了!


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


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


学习音视频技术欢迎访问 http://blog.yundiantech.com  

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