gcc 编译命令
最简单的编译命令是:
gcc main.c
默认生成的可执行文件是 a.out
如果需要指定输出文件,则需要使用如下的命令:
gcc main.c – o main
使用-Wall 选项可以输出所有的警告信息:
gcc -Wall main.c -o main
输出 C 源码的预处理结果, 使用-E 选项,默认是输出控制台,可以将其
重定向到文件保存:
gcc -E main.c > main.i
如果只想输出汇编代码而非二进制代码,使用-S :
gcc -S main.c
使用-C(大写) 选项只生成 C 程序对应的目标文件,但是不进行链接:
gcc -C main.c
输出所有的中间文件, 使用-save-temps 选项:
gcc -save-temps main.c
与共享库进行链接,应使用-l 选项再加上库程序的名字,例如,程序引用了 math 库中的 pow 函数:
gcc -Wall main.c -o main – lm
编译生成共享库时,为了保证所生成的库可以被加载到合法的任意地址,需
要使用-fPIC 选项,例如如下的命令生成一个名为 test.so 的共享库:
gcc -c -Wall -Werror -fPIC test.c
gcc -shared -o test.so test.o
如果想查看编译器是怎么编译源程序的,以及每一步所使用的命令是什么,
则应该使用-V 选项:
gcc -Wall -v main.c -o main
使用-ansi 可以指定编译器编译源码时遵循的语言标准,例如如下代码按照 ISO C89 对源码进行编译:
gcc -Wall -ansi main.c -o main
有些时候警告中往往预示着一些潜在的错误,因此部分项目在编译时要求将警告当做错误看到, 使用-Werror :
gcc -Wall -Werror main.c -o main
经过优化的代码调试时可能会出现找不到声明的变量、控制流程发生变化、有些语句被直接跳过等现象。总而言之,不可能对编译之后的代码进行调试。为了让编译器生成额外的信息以利于程序的调试(例如使用 gdb),使用 -g 。
gcc -Wall -Werror – g main.c -o main
使用-O0 选项可以禁用所有编译器优化,使用-O1、-O2 和-O3 逐步打开更多的优化选项。-Og 则在保证调试工作的同时完成了少量的优化。
如果有一些宏需要在编译时代入, 使用-D 选项,例如如下的代码
#include<stdio.h>
int main(void)
{
#ifdef MY_MACRO
printf("\n Macro defined \n");
#endif
char c = -10;
// Print the string
printf("\n The Geek Stuff [%d]\n", c);
return 0;
}
使用如下的命令编译:
gcc -Wall -DMY_MACRO main.c -o main
则会打印输出相应的语句。