[c/c++]GCC使用及其常用的选项的介绍
2017-01-31 09:59
661 查看
GCC使用及其常用的选项的介绍
GCC简介:(翻译官/翻译组织)
GNU编译器套件(GNU Compiler Collection)包括C、C++、Objective-C、Fortran、Java、Ada和Go语言的前端,也包括了这些语言的库(如libstdc++、libgcj等等)。GCC的初衷是为GNU操作系统专门编写的一款编译器。GNU系统是彻底的自由软件。此处,“自由”的含义是它尊重用户的自由。gcc所遵循的部分约定规则:
.c为后缀的文件,C语言源代码文件;.a为后缀的文件,是由目标文件构成的档案库文件;
.C,.cc或.cxx 为后缀的文件,是C++源代码文件且必须要经过预处理;
.h为后缀的文件,是程序所包含的头文件;
.i 为后缀的文件,是C源代码文件且不应该对其执行预处理;
.ii为后缀的文件,是C++源代码文件且不应该对其执行预处理;
.m为后缀的文件,是Objective-C源代码文件;
.mm为后缀的文件,是Objective-C++源代码文件;
.o为后缀的文件,是编译后的目标文件;
.s为后缀的文件,是汇编语言源代码文件;
.S为后缀的文件,是经过预编译的汇编语言源代码文件。
在linux 的 shell/bash 中 检查是否有安装gcc ,
gcc -v假如输出版本号 则已经安装
GCC对于文件的后缀名 要求很高,对于不同的后缀,执行的gcc的命令大略不同
譬如c语言的编译
#include <stdio.h>int main(){
printf("this is c\n");
return 0;
}
gcc编译
gcc -o build 001.c则会生产文件夹 build (gcc -o 输出文件) output
gcc 执行则需要执行
./build那么则输出了 this is c
在调试中,常用 可以看出编译的具体过程
gcc -v -o build 001.cApple LLVM version 7.0.0 (clang-700.1.76)
Target: x86_64-apple-darwin14.5.0
Thread model: posix
"/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/clang" -cc1 -triple x86_64-apple-macosx10.11.0 -Wdeprecated-objc-isa-usage -Werror=deprecated-objc-isa-usage
-emit-obj -mrelax-all -disable-free -disable-llvm-verifier -main-file-name 001.c -mrelocation-model pic -pic-level 2 -mthread-model posix -mdisable-fp-elim -masm-verbose -munwind-tables -target-cpu core2 -target-linker-version 253.6 -v -dwarf-column-info -resource-dir
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/../lib/clang/7.0.0 -isysroot /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.11.sdk -fdebug-compilation-dir /Users/mac -ferror-limit
19 -fmessage-length 80 -stack-protector 1 -mstackrealign -fblocks -fobjc-runtime=macosx-10.11.0 -fencode-extended-block-signature -fmax-type-align=16 -fdiagnostics-show-option -fcolor-diagnostics -o /var/folders/yq/wlxlmxh56b1gvsfrzdz102fw0000gn/T/001-500bcb.o
-x c 001.c
clang -cc1 version 7.0.0 based upon LLVM 3.7.0svn default target x86_64-apple-darwin14.5.0
ignoring nonexistent directory "/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.11.sdk/usr/local/include"
ignoring nonexistent directory "/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.11.sdk/Library/Frameworks"
#include "..." search starts here:
#include <...> search starts here:
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/../lib/clang/7.0.0/include
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include
/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.11.sdk/usr/include
/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.11.sdk/System/Library/Frameworks (framework directory)
End of search list.
"/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/ld" -demangle -dynamic -arch x86_64 -macosx_version_min 10.11.0 -syslibroot /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.11.sdk
-o build /var/folders/yq/wlxlmxh56b1gvsfrzdz102fw0000gn/T/001-500bcb.o -lSystem /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/../lib/clang/7.0.0/lib/darwin/libclang_rt.osx.a
预处理:
cpp -o a.i 001.c
编译:gcc -S [cc1 -o a.s 001.c]
/var/folders/yq/wlxlmxh56b1gvsfrzdz102fw0000gn/T/001-500bcb.o -x c 001.c
汇编 : gcc -c
as -o a.o a.s
链接:gcc -o [gcc -o build 001.c]
-o build a.o.....
举例子:
--编译
gcc -S -o a.s 001.c
生成了a.s 文件
.cfi_offset %rbp, -16
movq %rsp, %rbp
Ltmp2:
.cfi_def_cfa_register %rbp
subq $16, %rsp
leaq L_.str(%rip), %rdi
movl $0, -4(%rbp)
movb $0, %al
callq _printf
xorl %ecx, %ecx
movl %eax, -8(%rbp) ## 4-byte Spill
movl %ecx, %eax
addq $16, %rsp
popq %rbp
retq
.cfi_endproc
.section __TEXT,__cstring,cstring_literals
L_.str: ## @.str
.asciz "xxx\n"
.subsections_via_symbols
--汇编 : gcc -c
gcc -c -o a.o a.s
生成了 a.o 文件 [二进制文件]
^@^@^@^@^@^@^@^@^@^@^@*^@^@^@^@^@^@^@^B^@^@^D^@^@^@°^B^@^@^B^@^@^@^@^D^@<80>^@^@^@^@^@^@^@^@^@^@^@^@__cstring^@^@^@^@^@^@^@__TEXT^@^@^@^@^@^@^@^@^@^@*^@^@^@^@^@^@^@^E^@^@^@^@^@^@^@J^B^@^@^@^@^@^@^@^@^@^@^@^@^@^@^B^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@__compact_unwind__LD^@^@^@^@^@^@^@^@^@^@^@^@0^@^@^@^@^@^@^@^@^@^@^@^@^@^@P^B^@^@^C^@^@^@À^B^@^@^A^@^@^@^@^@^@^B^@^@^@^@^@^@^@^@^@^@^@^@__eh_frame^@^@^@^@^@^@__TEXT^@^@^@^@^@^@^@^@^@^@P^@^@^@^@^@^@^@@^@^@^@^@^@^@^@p^B^@^@^C^@^@^@^@^@^@^@^@^@^@^@^K^@^@h^@^@^@^@^@^@^@^@^@^@^@^@$^@^@^@^P^@^@^@^@^K
^@^@^@^@^@^B^@^@^@^X^@^@^@È^B^@^@^B^@^@^@è^B^@^@^P^@^@^@^K^@^@^@P^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^A^@^@^@^A^@^@^@^A^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@UH<89>åH<83>ì^PH<8d>=^[^@^@^@ÇEü^@^@^@^@°^@è^@^@^@^@1É<89>Eø<89>ÈH<83>Ä^P]Ãxxx
^@^@^@^@^@^@^@^@^@^@*^@^@^@^@^@^@^A^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^T^@^@^@^@^@^@^@^CzR^@^Ax^P^A^P^L^G^H<90>^A^@^@$^@^@^@^\^@^@^@<90>ÿÿÿÿÿÿÿ*^@^@^@^@^@^@^@^@A^N^P<86>^BC^M^F^@^@^@^@^@^@^@^Y^@^@^@^A^@^@-^K^@^@
预处理编译 --条件预处理
#include <stdio.h>
#define ABC
int main(){
#ifdef ABC
printf("%s,%s,%dxxx\n",__FUNCTION__,__FILE__,__LINE__);
#endif
printf("hhh");
return 0;
}
编译 gcc -o build 001.c
或者没有可以通过 gcc -DABC -o build 001.c 控制变量编译的开关 相当于 #define ABC
gcc -c -o a.o a.s
相关文章推荐
- GCC的使用及常用选项介绍
- C++模板常用使用方法介绍
- 和菜鸟一起学c之gcc编译过程及其常用编译选项
- Redis常用数据类型介绍、使用场景及其操作命令
- Redis常用数据类型介绍、使用场景及其操作命令
- 和菜鸟一起学c之gcc编译过程及其常用编译选项【转】
- GCC常用选项&使用详解
- C++模板常用使用方法介绍
- Redis常用数据类型介绍、使用场景及其操作命令
- Redis常用数据类型介绍、使用场景及其操作命令
- Redis常用数据类型介绍、使用场景及其操作命令
- 和菜鸟一起学c之gcc编译过程及其常用编译选项
- 和菜鸟一起学c之gcc编译过程及其常用编译选项
- 学c之gcc编译过程及其常用编译选项
- Redis常用数据类型介绍、使用场景及其操作命令
- GCC 使用手册和常用功能介绍
- Synplify 使用过程中最常用的选项及命令的介绍
- Redis常用数据类型介绍、使用场景及其操作命令
- [C++] gcc/g++ 命令的常用选项
- Redis常用数据类型介绍、使用场景及其操作命令