打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
gcc编译选项
文件后缀简介:
.c 需要进行预处理的 C 源代码
.h C 的头文件
.i 不需要预处理的 C 源代码
.o 可供链接器使用的目标文件
.S 需要预处理的汇编语言源代码
.s 不需要预处理的汇编语言源代码
.so 包含一个或多个供链接器使用的 .o 文件的动态库(也称共享库)

一. 常用编译命令选项
-c   只激活预处理,编译,和汇编,也就是他只把程序做成obj文件   
例子用法:   gcc -c hello.c   他将生成.o的obj文件
-S   只激活预处理和编译,就是指把文件编译成为汇编代码。   
例子用法   gcc -S hello.c   他将生成.s的汇编代码,你可以用文本编辑器察看
-E   只激活预处理,这个不生成文件,你需要把它重定向到一个输出文件里面.   
例子用法:   gcc -E hello.c > pianoapan.txt   gcc -E hello.c | more

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

1. 无选项编译链接
用法:#gcc test.c
作用:将test.c预处理、汇编、编译并链接形成可执行文件。这里未指定输出文件,默认输出为a.out。编译成功后可以看到生成了一个a.out的文件。在命令行输入./a.out 执行程序。./表示在当前目录,a.out为可执行程序文件名。

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

3. 选项 -E
用法:#gcc -E test.c -o test.i
作用:将test.c预处理输出test.i文件。预处理后停止编译. .i通常为已经预处理过的C原始程序

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。输入./test执行程序。


7. 选项-O
用法:#gcc -O1 test.c -o test
作用:使用编译优化级别1编译程序。级别为1~3,级别越大优化效果越好,但编译时间越长。输入./test执行程序。

8.编译使用C++ std库的程序
用法:#gcc test.cpp -o test -lstdc++
作用:将test.cpp编译链接成test可执行文件。-lstdc++指定链接std c++库。

二. 多源文件的编译方法
如果有多个源文件,基本上有两种编译方法:
[假设有两个源文件为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参数的警告提示功能
1:-pedantic 使用了ANSI/ISO C语言扩展语法的地方将产生相应的警告信息
2:-Wall    产生尽可能多的警告信息,建议始终带上
3:-Werror   将所有的警告当成错误进行处理

四.库依赖
函数库实际上就是一些头文件和库文件的集合.
-I选项向gcc的头文件搜索路径中添加新的目录
-L选项向gcc的库文件搜索路径中添加新的目录
-l指定链接的库文件名,如 -ldavid 表示指示gcc去连接库文件libdavid.so
-static强制使用静态链接库
-share 此选项将尽量使用动态库,所以生成文件比较小,但是需要系统由动态库.
动态库文件(.so)和静态库文件(.a)的区别在于程序执行时所需的代码是运行时动态加载的,还是编译时静态加载的.gcc优先使用动态库

其他:
-g   只是编译器,在编译的时候,产生调试信息。  
-C   在预处理的时候,不删除注释信息,一般和-E使用,有时候分析程序,用这个很方便的   
-M  生成文件关联的信息。包含目标文件所依赖的所有源代码你可以用gcc -M hello.c 来测试一下,很简单。   
-pipe:管道,它可以用来同时连接两个程序,其中一个程序的输出将直接作为另一个程序的输入,这样就可以避免使用临时文件,提高编译速度,但编译时消耗更多的内存.
-Dmacro 定义指定的宏,使它能够通过源码中的#ifdef进行检验
-g3    获得有关调试程序的详细信息
-v    启动所有报警
-w    禁止所有报警

五.常见错误类型
1:syntex error,语法错误
2:can't find include file,头文件错误
3:ld:lm:No such file or directory,找不到所需的函数库
4:Undefined symbol未定义符号:源代码文件未被包含或编译。
本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
gcc命令
GCC指令
C语言编译器MINGW的使用说明
gcc总结【基本用法】【选项】【动静态库】
g++编译命令选项
Linux下gcc与g++用法以及编写makefile
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服