从零开始学习音视频编程技术(32) Linux篇之编译和链接
2017-07-11 16:40
183 查看
原文地址: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内容如下:
main函数非常简单,就是执行了一个myfunction函数。
现在我们把它编译成main.o中间文件,命令为:
gcc -c main.c
执行完毕 便可以看到顺利生成了一个main.o文件,这是一个中间文件,就类似windows上的.obj文件。
细心的朋友会发现,上面我们只是声明了一个myfunction函数,函数是没有实现的。
现在我们尝试去链接它,看看会发生什么。
链接的命令为:
gcc -o hello main.o
执行后结果如下:
可以看到,我们期望的 myfunction函数未定义终于出现了。
这就是链接错误。
下面我们继续新建一个function.c文件,文件内容如下:
代码很简单,就是打印了函数名字。
继续使用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
在windows下写程序的时候,通常我们所说的“编译”程序,就是直接点IDE工具上的那个运行图标,程序就运行起来了。 所以windows下开发的时候很少对程序编译的整个过程有大概的了解,对编译和链接理解的不是很透彻(至少我当初是这样的),每当看到编译器报错的时候,心就开始方了,不能迅速找出问题所在。
在Linux写程序,可以大大加强我们在这方面的能力,深刻理解了编译和链接的意思,可以使我们快速看明白编译器报的错,因此,有必要花点时间稍微理解一下,下面我们就从一个简单的例子入手,理解一下编译和链接:
回顾一下上节,我们使用gcc将hello.c编译成hello的命令:gcc -o hello hello.c。
这条命令就是将hello.c先编译再链接成一个可执行程序。
下面我们写个简单的例子,将编译和链接分开:
首先写一个main.c,如何新建文件请查阅上文,
main.c内容如下:
现在我们把它编译成main.o中间文件,命令为:
gcc -c main.c
执行完毕 便可以看到顺利生成了一个main.o文件,这是一个中间文件,就类似windows上的.obj文件。
细心的朋友会发现,上面我们只是声明了一个myfunction函数,函数是没有实现的。
现在我们尝试去链接它,看看会发生什么。
链接的命令为:
gcc -o hello main.o
执行后结果如下:
可以看到,我们期望的 myfunction函数未定义终于出现了。
这就是链接错误。
下面我们继续新建一个function.c文件,文件内容如下:
继续使用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
相关文章推荐
- 从零开始学习音视频编程技术(34) Linux篇之编译ffmpeg
- 从零开始学习音视频编程技术(31) Linux篇之hello world
- 从零开始学习音视频编程技术(三) 开发环境搭建(Qt4.86手动设置环境,主要就是设置g++和qmake,比较透彻,附下载链接)
- 从零开始学习音视频编程技术(33) Linux篇之Makefile
- 从零开始学习音视频编程技术(35) windows下编译并调试ffmpeg
- 从零开始学习音视频编程技术(30) Linux篇之系统安装
- 从零开始学习音视频编程技术(十九) 录屏软件开发之YUV AAC合成MP4
- 从零开始学习音视频编程技术(二十) 录屏软件开发之录屏生成MP4
- 从零开始学习音视频编程技术(七) FFMPEG Qt视频播放器之SDL的使用
- 从零开始学习音视频编程技术(十一) FFMPEG Qt视频播放器之美化界面
- 从零开始学习音视频编程技术(四) FFMPEG的使用
- 从零开始学习音视频编程技术(十五) YUV420P转RGB32
- 从零开始学习音视频编程技术(六) FFMPEG Qt视频播放器之显示图像
- 从零开始学习音视频编程技术(十三) 录屏软件开发之屏幕录像
- 从零开始学习音视频编程技术(一) 视频格式讲解
- 从零开始学习音视频编程技术(很好的系列)——QT+SDL+FFMPEG
- 从零开始学习音视频编程技术(十八) 录屏软件开发之编码AAC
- 从零开始学习音视频编程技术(八) FFMPEG Qt视频播放器之音视频同步
- 从零开始学习音视频编程技术(十) FFMPEG Qt视频播放器之播放控制
- 从零开始学习音视频编程技术(五) 使用FFMPEG解码视频之保存成图片