linux gcc常用编译选项大全+动态库静态库的创建和使用

原文链接: https://blog.csdn.net/a568478312/article/details/79195218

-c:只激活预处理,编译,和汇编,也就生成obj文件
-S:只激活预处理和编译,就是指把文档编译成为汇编代码。
-E:只激活预处理,不生成文档,需要把他重定向到一个输出文档里。
-o:定制目标名称,缺省的时候gcc 编译出来的文档是a.out
-ansi:关闭gnu c中和ansi c不兼容的特性,激活ansi c的专有特性。
-Dmacro:相当于C语言中的#define macro
-Dmacro=defn:相当于C语言中的#define macro=defn
-Umacro :相当于C语言中的#undef macro
-Idir:指定头文件路径
-I:指定include包含文件的搜索目录
-llibrary:指定库
-Ldir:定制编译的时候,搜索库的路径。
-g:指示编译器,在编译的时候,产生调试信息。
-static:此选项将禁止使用动态库,所以,编译出来的东西,一般都很大。
-share:此选项将尽量使用动态库,所以生成文档比较小,但是需要系统由动态库。
-O0 -O1 -O2 -O3:编译器的优化选项的4个级别,-O0表示没有优化,-O1为缺省值,-O3优化级别最高
-Wall:会打开一些很有用的警告选项,建议编译时加此选项。
-std:指定C标准,如-std=c99使用c99标准,-std=gnu99,使用C99 再加上 GNU 的一些扩展。

高级选项

-v:详细输出编译过程中所采用的每一个选项
-C:预处理时保留注释信息
-ggdb:在可执行文件中包含可供GDB使用的调试信息
-fverbose-asm:在编译成汇编语言时,把C变量的名称作为汇编语言中的注释
-save-temps:自动输出预处理文件、汇编文件、对象文件,编译正常进行
-fsyntax-only:只测试源文件语法是否正确,不会进行任何编译操作
-ffreestanding:编译成独立程序,而非宿主程序

语言标准

-ansi:ANSI标准
-std=c99:C99标准
-std=gnu89:ISO/IEC 9899:1990 以及GNU扩充
-std=gnu99:ISO/IEC 9899:1999 以及GNU扩充
-trigraphs:支持ISO C三字符组

出错提示
-w:忽略所有警告

-Werror:不区分警告和错误,遇到任何警告都停止编译
-Wall:开启大部分警告提示
-Wshadow:某语句块作用域变量与更大作用域的另一变量同名时发出警告(此警告未包含在-Wall选项中,需单独开启)
-Wextra:对所有合法但值得怀疑的表达式发出警告

优化选项

-O0:关闭所有优化选项
-O1:第一级别优化,使用此选项可使可执行文件更小、运行更快,并不会增加太多编译时间,可以简写为-O
-O2:第二级别优化,采用了几乎所有的优化技术,使用此选项会延长编译时间
-O3:第三级别优化,在-O2的基础上增加了产生inline函数、使用寄存器等优化技术
-Os:此选项类似于-O2,作用是优化所占用的空间,但不会进行性能优化,常用于生成最终版本

自定义扩展名

-x:使用此选项可以指定自定义的源文件扩展名,类型有c、c-header、cpp-output、assembler、assembler-with-cpp、none
凡-x后面所列的所有文件都会被视为其指定的类型,要想改变类型可以再一次使用-x选项,或者使用-x none回到默认设置
示例:gcc -o test test.c -x assembler test.asm -x c test2.c

扫描二维码关注公众号,回复: 7603588 查看本文章

静态库的创建和使用

以创建静态库static_lib.a为例
编写C源文件static_lib.c,其中写入需要重复调用的函数,然后使用命令gcc -c static_lib.c生成目标文件static_lib.o
使用ar工具创建静态库,命令格式:ar rcs static_lib.a static_lib.o
编写C头文件static_lib.h,其中写入这些函数的原型声明
编写主函数app.c,引入头文件static_lib.h,这样就可以正常使用那些自定义的可复用函数了
使用命令gcc app.c -static ./static_lib.a -o app编译生成可执行文件app

动态库的创建和使用

以创建动态库share_lib.so为例
编写C源文件share_lib.c,写入需要重复调用的函数,然后使用命令gcc -shared -fPIC -o share_lib.so share_lib.c生成动态库文件share_lib.so
编写C头文件share_lib.h,写入函数的原型声明
编写主函数app.c,引入头文件share_lib.h,然后就可以调用在动态库中自定义的函数了
使用命令gcc app.c ./share_lib.so -o app编译生成可执行文件app

gcc编译编译选项大全

https://blog.csdn.net/a568478312/article/details/79195218

猜你喜欢

转载自blog.csdn.net/qq_34595352/article/details/102744765