linux下使⽤gcc编译运⾏CC++程序
编译C
⾸先,程序编译过程有:
1.预处理(展开宏,头⽂件,检查代码是否有误)
2.编译(将.c转为汇编代码.s)
3.汇编(将汇编代码.s转为机器代码.o)
4.链接(将所有机器代码.o和库⽂件链接成⼀个可执⾏程序)
⼀般编译常常包括了:预处理,编译,汇编
在linux系统中,编译c使⽤gcc编译器,如下:
gcc -o  out    in1.c    in2.c    //gcc编译以及链接(对in1⽂件和in2⽂件进⾏编译⽣成out.bin⽂件,“-o”:表⽰⽣成可执⾏⽂件)
gcc -c    in1.c    in2.c  -o  out.o //gcc编译不链接(对in1⽂件和in2⽂件⽂件进⾏编译⽣成out.o⽂件,
“-c”:表⽰只⽣成*.o⽂件第⼆个"-o":表⽰制定⽣成哪个.o⽂件)
(若只对单个⽂件编译及链接,也可以直接输⼊: gcc in.c, 系统默认编译⽣成a.out可执⾏⽂件)
若需要在arm板⾥运⾏,就需要在linux系统中使⽤arm-linux-gcc交叉编译才⾏:
arm-linux-gcc -o  out    in1.c    in2.c    //gcc编译以及链接(对in1⽂件和in2⽂件进⾏编译⽣成out.bin⽂件,“-o”:表⽰⽣成可执⾏⽂件)
arm-linux-gcc -c  in1.c    in2.c  -o  out.o // gcc编译不链接(对in1⽂件和in2⽂件⽂件进⾏编译⽣成out.o⽂件,
“-c”:表⽰只⽣成*.o⽂件第⼆个"-o":表⽰指定⽣成哪个.o⽂件)
-I      //表⽰添加头⽂件位置
⼀般编译程序时,说到不到某个头⽂件时,编译时直接加上"-I  该头⽂件⽬录",即可编译OK
-l                    //指定库⽂件,l后⾯紧跟库⽂件,⽐如数学库:-lm,对应着libm.so⽂件,只需要去掉lib和.so即可
编译程序时,⼀般说不到某函数定义时,说不定就是没加库⽂件原因,⽐如不到cos()函数定义,则编译时直接加上"-lm"即可
编译C++
⽅法和上⾯类似,使⽤g++编译器,只不过该编译器会⾃动链接C++库
注意:若需要c++11标准,需要gcc 4.8以上
以编译两个C⽂件(a.c和hello.c)为⽰例:
vi a.c                                //编辑a.c , 它将被hello.c调⽤,前提是这两个⽂件必须在同⼀⽬录下
内容如下:
vi hello.c                          //编辑hello.c
内容如下:
linux下gcc编译的四个步骤
gcc -o hello  hello.c  a.c              //gcc编译以及链接(对hello.c⽂件和a.c⽂件进⾏编译⽣成hello.bin⽂件,“-o”:表⽰⽣成可执⾏⽂件)./hello                                  //运⾏hello.bin
效果如下所⽰: