LINUX 下GCC编译C、C++入门
来源:互联网 发布:head first python 2 编辑:程序博客网 时间:2024/05/21 12:46
GNU
是“GNU is Not Unix”的递归缩写,又称革奴计划,是由RichardStallman在1983年9月27日公开发起的。它的目标是创建一套完全自由的操作系统。
GCC
是GNU编译器集合(GNUCompiler Collector)的缩写,GNU编译器集合包括C,C++,Object-c,Fortran,JAVA和Ada的前端以及这些语言对应的库(libstdc++,libgcj,…),早期的gcc是指GNU的C语言编译器(GNU C Compiler),随着C++等语言的加入,gcc的含义才变化成了GNU编译器集合,C作为gcc的原生语言,故编译时不需要额外选项。
C、C++在GCC下的编译
1.编译环境的安装
sudo apt-get install build-essential (如果需要编译Fortran ,那么需要安装gfortran或g77)
2.C程序编译
1)简单C程序
#include<stdio.h>void main(){printf("hello world!\n");}将以上文件保存为 hello.c ,要用gcc编译文件,使用:
2)编译多个文件
将hello world程序分成3个文件:hello.c ,hello_fn.c,hello.h
主程序hello.c如下:
#include"hello.h"int main(){hello("hello");return 0;}在hello.c中没有包含stdio.h,因为没有直接调用printf,而hello.h包含了hello()函数的声明,如下:
void hello(const char* name);而函数的真正的定义在hello_fn.c中,如下:
#include"hello.h"#include<stdio.h>void hello(const char* name){printf("hello world \n");}
若要gcc编译以上源文件,使用下面命令:
gcc -Wall hello.c hello_fn.c -o newhello
注意到hello.h并没有在命令行中,因为愿文件中的#include“hello.h”指示符使得编译器自动将其包含到合适位置
运行:./newhello
源程序各部分被编译为单一的可执行文件,它与先前的例子产生的结果相同。
3)简单的makefile文件
要了解更多的信息,参看GNU Make手册
Make从makefile(默认是当前目录下的名为makefile的文件)中读取项目的描述,makefile指定了一系列目标(如可执行文件)和依赖(如对象文件和源文件)的编译规则。其格式:
目标:依赖
命令
对每一个目标,make检查其对应的依赖文件修改时间来确定目标是否需要利用对应的命令重新建立,注意到,makefile中命令行必须以单个的TAB字符进行缩进,且命令那行必须缩进
GNU Make包含许多默认的规则(参考隐含规则)来简化makefile的构建,比如说,它们指定‘.o’文件可以通过编译'.c'文件得到,可执行文件可以将'.o'链接到一起获得。隐含规则通过被叫做make变量的东西所指定,比如CC(C语言编译器)和CFLAGS(C程序编译选项);在makefile文件中它们通过独占一行的变量=值的形式被设置。对C++其等价的变量是CXX和CXXFLAGS,而变量CPPFLAGS则是编译预处理选项。
上面的makefile文件如下:
CC=gccCFLAGS=-Wallhello:hello.o hello_fn.oclean: rm -f hello hello.o hello_fn.o
解读:使用C语言编译器gcc和编译选项-Wall ,从对象文件hello.o和hello_fn.o生成目标可执行文件hello(文件hello.o和hello_fn.o是通过隐含规则分别由hello.c和hello_fn.c生成)。目标clean没有依赖文件,它只是简单的移除所有编译生成的文件。rm名字-f抑制文件不存在时产生的错误消息。
注意:如果包含main函数的cpp文件为A.cpp,makefile中最好把可执行文件名也写成A。
$makegcc -Wall -c -o hello.o hello.ogcc -Wall -c -o hello_fn.o hello_fn.cgcc -Wall -c -o hello.o hello.c$./hellohello world!一个源文件被修改重新生成可执行文件,简单的再次输入make即可。通过检查目标文件和依赖文件的时间戳,程序make可识别哪些文件已经修改并依据对应的规则更新其对应的目标文件:
4)链接外部库
#include<math.h>#include<stdio.h>int main(){double x=2.0;double y=sin(x);printf("the value of sin(2.0) is %f\n",y);return 0;}执行:gcc -Wall calc.c -o calc报错:
2)C++编译
- LINUX 下GCC编译C、C++入门
- linux下GCC编译C程序
- linux下gcc编译c程序
- Linux下用gcc编译c程序
- Linux下gcc编译c源程序
- linux下GCC编译C程序(一)
- linux gcc 编译 c
- linux gcc编译C程序
- linux gcc编译C程序
- linux gcc编译C程序
- linux c下多线程并发服务器GCC编译问题
- Linux下编译调试C程序(GCC,GDB)
- linux下编译c文件的过程(gcc)
- Linux 下 C 编译gcc与调试gdb工具介绍
- Linux下gcc编译C程序指令小结
- Linux下编译C/C++以及gcc/g++常用参数
- Linux下的简单C程序gcc编译、gdb调试。
- linux下利用gcc编译C和C++
- 栈的压入、弹出序列
- 求两个时间的差
- .NET实现在网页中预览Office文件的3个方法
- kafka replica分布算法
- [Servlet]微博应用程序(1):Servlet请求与响应的应用
- LINUX 下GCC编译C、C++入门
- EventBus使用详解(一)—— 初步使用EventBus
- Linux基础(四)交换分区的大小应当与系统物理内存的大小
- iOS框架结构图
- iOS 本地存取图片
- adb官方文档
- 关于多重继承和虚拟继承
- linux编程获取ip地址
- Android判断gps是否打开