gcc常用命令
gcc常用命令
参考链接:Linux C编程基础 娄嘉鹏
GCC编译器(Linux gcc命令)30分钟入门教程
一、命令格式
gcc [-c|-S|-E] [-std=standard]
[-g] [-pg] [-Olevel]
[-Wwarn...] [-Wpedantic]
[-Idir...] [-Ldir...]
[-Dmacro[=defn]...] [-Umacro]
[-foption...] [-mmachine-option...]
[-o outfile] [@file] infile...
二、常用选项
选项 | 作用 | 示例 |
---|---|---|
-E | 仅执行预编译 | gcc -E hello.c -o hello.i |
-S | 将C代码转换为汇编 | gcc -S hello.i -o hello.s |
-c | 仅执行编译操作,不进行链接操作 | gcc -c hello.s -o hello.o |
-o | 指定生成的输出文件。If -o is not specified, the default is to put an executable file in a.out, the object file for source.suffix in source.o, its assembler file in source.s, a precompiled header file in source.suffix.gch, and all preprocessed C source on standard output. | |
-I(大写的i) | 指定头文件目录 | gcc main.c -I ../include -o main |
-L | 指定库文件所在的目录 | gcc ../src/main.c -I ../include/head.h -L ../libs/ -l math |
-l | 指定程序要链接的库 | gcc会在静态库名前加上前缀lib,然后追加扩展名.a得到的静态库文件名来查找静态库文件;动态库追加扩展名.so |
三、创建库
-
静态库
1、输入gcc -c -I/头文件目录 xxx.c
生成.o文件
2、输入ar rcvs libxxx.a xxx.o
生成静态库 -
动态库
1、输入gcc -fPIC -c -I/头文件目录 xxx.c
生成.o文件-fPIC 选项作用于编译阶段,告诉编译器产生与位置无关代码(Position-Independent Code);这样一来,产生的代码中就没有绝对地址了,全部使用相对地址,所以代码可以被加载器加载到内存的任意位置,都可以正确的执行。这正是共享库所要求的,共享库被加载时,在内存的位置不是固定的。
2、输入
gcc -shared -o libmath.so xxx.o
生成库
四、指定C版本
C版本 | GCC选项 |
---|---|
GNU 89 | 无, -std=gnu89 |
ANSI, ISO C90 | -ansi,-std=89 |
ISO C99 | -std=c99 |
ISO C11 | -std=c11 |
五、指定xx位程序
gcc -m32 proc.c
32位程序,可以在32位和64位机器上运行gcc -m64 proc.c
64位程序,只能在64位机器上运行