gcc

1 常用的gcc编译选项

  • 没有编译选项 gcc helloworld.c结果会在与helloworld.c相同的目录下产生一个a.out的可执行文件。
  • -Wall选项打开所有最常用到的编译警告,强烈建议打开,可以捕捉到许多在C编程中最常发生的错误。比如warning: control reaches end of non-void function (警告:控制流到达返回值非void的函数结尾)。

  • -o 选项来为可执行文件指定一个不同的输出文件。gcc -o helloworld helloworld.c输出的可执行文件的名为helloworld

  • -c 只编译,不汇编连接。gcc -c helloworld.c产生一个叫helloworld.o的目标文件

  • -l -lNAME试图链接标准库目录下的文件名为libNAME.a中的对象文件。在大型程序中通常会用到很多-l选项,来链接象数学库,图形库和网络库。使用选项-lNAME的情况下,静态库libNAME可以用于链接,但编译器首先会检查具有相同名字和.so为扩展名的共享库。默认情况下,载入器仅在一些预定义的系统目录中查找共享库,比如/usr/local/lib/usr/lib。如果库不在这些目录中,那它必须被添加到载入路径(load path)中去。设置载入路径的最简单方法是通过环境变量LD_LIBRARY_PATH。

  • -static选项可以迫使gcc静态链接,避免使用共享库。

  • -I用于把新目录添加到include路径上。例如,-I/opt/gdbm-1.8.3/include

  • -L用于把新目录添加到库搜索路径上。例如,-L/opt/gdbm-1.8.3/lib

  • -ansi禁止那些与ANSI/ISO标准冲突的GNU扩展特性。

  • -std选项来控制GCC编译时采用的某个C语言标准。

  • -DNAME选项在命令行上定义预处理宏NAME,默认情况下,其值为1。-D命令行选项可以用来定义有值的宏,形式是-DNAME=VALUE,例如-DNUM=”2+2”,预处理器将把NUM替换成2+2。当宏是某个表达式的一部分时,用圆括号把宏括起来是个好主意,比如10 * (NUM)*

  • -g调试选项来在对象文件和可执行文件中存储另外的调试信息。
  • -OLEVEL用来选择哪一种优化级别,这里LEVEL是从1到3的数字。-O0或没有-O选项(默认),在该优化级别,GCC不会实施任何优化。

附录

官方:https://gcc.gnu.org/onlinedocs/gcc-13.2.0/gcc/Option-Index.html