GCC基本用法

Posted mb630ec035bcfe8

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了GCC基本用法相关的知识,希望对你有一定的参考价值。


linux下c编程起步一:掌握gcc基本用法

vi或其它编辑器编写。

编译则使用gcc命令。要往下学习首先就得熟悉gcc命令的用法。

gcc命令提供了非常多的命令选项,但并不是所有都要熟悉,初学时掌握几个常用的就可以了,到后面再慢慢学习其它选项,免得因选项太多而打击了学习的信心。

 

一. 常用编译命令选项

假设源程序文件名为test.c。

 

1. 无选项编译链接

用法:#gcc test.c

作用:将test.c预处理、汇编、编译并链接形成可执行文件。这里未指定输出文件,默认输出为a.out。

 

2. 选项 -o

用法:#gcc test.c -o test

作用:将test.c预处理、汇编、编译并链接形成可执行文件test。-o选项用来指定输出文件的文件名。

 

3. 选项 -E

用法:#gcc -E test.c -o test.i

作用:将test.c预处理输出test.i文件。

 

4. 选项 -S

用法:#gcc -S test.i

作用:将预处理输出文件test.i汇编成test.s文件。

 

5. 选项 -c

用法:#gcc -c test.s

作用:将汇编输出文件test.s编译输出test.o文件。

 

6. 无选项链接

用法:#gcc test.o -o test

作用:将编译输出文件test.o链接成最终可执行文件test。

 

7. 选项-O

用法:#gcc -O1 test.c -o test

作用:使用编译优化级别1编译程序。级别为1~3,级别越大优化效果越好,但编译时间越长。

 

二. 多源文件的编译方法

 

如果有多个源文件,基本上有两种编译方法:

[假设有两个源文件为test.c和testfun.c]

 

1. 多个文件一起编译

用法:#gcc testfun.c test.c -o test

作用:将testfun.c和test.c分别编译后链接成test可执行文件。

 

2. 分别编译各个源文件,之后对编译后输出的目标文件链接。

用法:

#gcc -c testfun.c //将testfun.c编译成testfun.o

#gcc -c test.c //将test.c编译成test.o

#gcc -o testfun.o test.o -o test //将testfun.o和test.o链接成test

 

以上两种方法相比较,第一中方法编译时需要所有文件重新编译,而第二种方法可以只重新编译修改的文件,未修改的文件不用重新编译。

 

gcc编程环境基础5--编译时头文件和库文件路径指定

※预处理(preprocessing),编译(compilation),汇编(assembly)和连接(linking)
※include的header文件,连结数据库,系统定义,总共有下列来源指定gcc去那找.
当初在编译时指定的(在~gcc/gcc/collect2.c:locatelib()
写在specs内的
后来用-D -I -L指定的
gcc环境变量设定(编译的时候)
ld.so的环境变量(这是run time的时候)
=======================================
   1
=======================================
1.头文件
gcc 在编译时怎么去寻找所需要的头文件 :
※所以header file的搜寻会从-I开始
※然后找gcc的环境变量 C_INCLUDE_PATH,CPLUS_INCLUDE_PATH,OBJC_INCLUDE_PATH
※再找内定目录
/usr/include
/usr/local/include
/usr/lib/gcc-lib/i386-linux/2.95.2/include
/usr/lib/gcc-lib/i386-linux/2.95.2/../../../../include/g++-3
/usr/lib/gcc-lib/i386-linux/2.95.2/../../../../i386-linux/include
库文件不过如果装gcc的时候,是有给定的prefix的话,那么就是
/usr/include
prefix/include
prefix/xxx-xxx-xxx-gnulibc/include
prefix/lib/gcc-lib/xxxx-xxx-xxx-gnulibc/2.8.1/include

2.库文件
cos()等函式库的选项要多加 -lm
编译的时候:
※gcc会去找-L
※再找gcc的环境变量LIBRARY_PATH
※再找内定目录 /lib /usr/lib /usr/local/lib 这是当初compile gcc时写在程式内的
=======================================
     2
=======================================

2.利用Linux系统上已有的研发库
(1).查看库文件提供了哪些调用
能用nm命令自己查看库文件提供了哪些调用
(2).通过头文件查看函数的定义
=======================================
     3
=======================================
3.gcc选项
总体选项 (Overall Option)          :(-c(生成目标但不连接) -S(汇编) -E(预处理)   -o file(生成指定的文件) -pipe -v(显示过程)     -x language (设定文件所使用的语言,使后缀名无效`c’, 可用参数`objective-c’, `c-header’, `c++’, `cpp-output’, `assembler’, and `assembler-with-cpp’))
语言选项 (LANGUAGE OPTIONS)  :(-ansi 只支持 ANSI 标准的 C 语法.这一选项将禁止 GNU C 的某些特色)
预处理器选项 (Preprocessor Option) :(-Aassertion -C -dD -dM -dN -Dmacro[=defn] -E -H -idirafter dir -include file -imacros file -iprefix file -iwithprefix dir -M -MD -MM -MMD -nostdinc -P -Umacro 相当于C语言中的#undef macro -undef -DMACRO 以字符串“1”定义 MACRO 宏,  -DMACRO=DEFN 以字符串“DEFN”定义 MACRO 宏)
汇编器选项 (ASSEMBLER OPTION)      :(-Wa,option )
连接器选项 (LINKER OPTION)         :(-llibrary -nostartfiles -nostdlib -static -shared -symbolic -Xlinker option -Wl,option -u symbol  )
目录选项 (DIRECTORY OPTION)        :(-Bprefix -Idir -I- -Ldir) 
警告选项 (WARNING OPTION)   :(-w 不生成所有警告信息,-Wall 生成所有警告信息)
调试选项 (DEBUGGING OPTION)        :(-a -dletters -fpretend-float -g -glevel -gcoff -gxcoff -gxcoff+ -gdwarf -gdwarf+ -gstabs -gstabs+ -ggdb  -p -pg -save-temps -print-file-name=library -print-libgcc-file-name -print-prog-name=program  )
优化选项 (OPTIMIZATION OPTION)     :(-O0不进行优化处理,-O或-O1优化生成代码 -O2进一步优化  -O3比-O2更进一步优化,包括inline函数)
目标机选项 (TARGET OPTION)   :(-b machine -V version )
机器相关选项 (MACHINE DEPENDENT OPTION):(-m486 针对 486 进行代码优化)
代码生成选项 (CODE GENERATION OPTION)   :(-fpic -fPIC)

以上是关于GCC基本用法的主要内容,如果未能解决你的问题,请参考以下文章

gcc基本用法

GCC/G++/Clang基本用法

Linux(程序设计):05---gcc的基本用法

gcc编译流程

gcc编译流程

11.vue-router编程式导航