从零开始学习音视频编程技术(32) Linux篇之编译和链接
来源:互联网 发布:计算机程序员考试 编辑:程序博客网 时间:2024/06/07 12:59
原文地址: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内容如下:
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文件,这是一个可执行文件,可以直接运行:
到此,可以完美谢幕了!
只要理解了这个简单的例子,便能掌握编译和链接的本质了。
请牢记一句话:磨刀不误砍柴工!
音视频技术交流讨论欢迎加 QQ群 121376426
原文地址:http://blog.yundiantech.com/?log=blog&id=31
- 从零开始学习音视频编程技术(32) Linux篇之编译和链接
- 从零开始学习音视频编程技术(30) Linux篇之系统安装
- 从零开始学习音视频编程技术(31) Linux篇之hello world
- 从零开始学习音视频编程技术(33) Linux篇之Makefile
- 从零开始学习音视频编程技术(五) 使用FFMPEG解码视频之保存成图片
- 从零开始学习音视频编程技术(六) FFMPEG Qt视频播放器之显示图像
- 从零开始学习音视频编程技术(十) FFMPEG Qt视频播放器之播放控制
- 从零开始学习音视频编程技术(十一) FFMPEG Qt视频播放器之美化界面
- 从零开始学习音视频编程技术(十二) 录屏软件开发之视频采集
- 从零开始学习音视频编程技术(五) 使用FFMPEG解码视频之保存成图片
- 从零开始学习音视频编程技术(六) FFMPEG Qt视频播放器之显示图像
- 从零开始学习音视频编程技术(十) FFMPEG Qt视频播放器之播放控制
- 从零开始学习音视频编程技术(九) FFMPEG Qt视频播放器之同步进阶篇
- 从零开始学习音视频编程技术(八) FFMPEG Qt视频播放器之音视频同步
- 从零开始学习音视频编程技术(八)FFMPEG Qt视频播放器之音视频同步
- 从零开始学习音视频编程技术(一) 视频格式讲解
- 从零开始学习音视频编程技术(二) 音频格式讲解
- 从零开始学习音视频编程技术(十三) 录屏软件开发之屏幕录像
- 和为S的连续正数序列
- django-ckeditor表情包修改
- js获取当前时间并转变格式
- 阿里GTS原理分析
- python学习8------高阶函数
- 从零开始学习音视频编程技术(32) Linux篇之编译和链接
- 【个人笔记重点,不作为参考】主题:angular2有关对象的注意事项
- LeetCode 152. Maximum Product Subarray(最大连续乘积)
- CSDN日报20170711——《离开校园,入职阿里,开启新的程序人生》
- 和为S的两个数字
- java_web当中客户端-服务器端对于中文编码格式的处理
- js继承
- Kaggle-ValueError: Input contains NaN, infinity or a value too large for dtype('float32').
- 配置静态nat