一CC编译程序过程分四个阶段 1. 预处理(Pre-Processing) 2. 编译(Compiling) 3. 汇编(Assembling) 4. 链接(Linking) 二.简单编译命令 我们以Hello world程序来开始我们的学习.代码如下: /* hello.c */ #include <stdio.h> int main(void) { printf ("Hello world!\n"); r eturn 0; } 1. 执行如下命令: $ gcc -o hello hello.c 输出: Hello,world! 2. 我们也可以分步编译如下: (1) $ gcc -E hello.c -o hello.i //预处理结束 //这时候你看一下hello.i ,可以看到插进去了很多东西. (2) $ gcc -S hello.i //生成汇编代码后结束 (3) $ gcc -c hello.c 或者: $ gcc -c hello.c -o hello.o 或者: $ gcc -c hello.i -o hello.o //编译结束 //生成 hello.o文件 (4) $ gcc hello.o -o hello.o 或者: $ gcc -o hello hello.c //链接完毕,生成可执行代码 3. 我们可以把几个文件一同编译生成同一个可执行文件. 比如:一个工程有main.c foo.c def.c生成foo的可执行文件. 编译命令如下: $ gcc -c main.c foo.c def.c -o foo 或者: $ gcc -o foo main.c foo.c def.c 三.库依赖 函数库是一些头文件(.h)和库文件(.so或者.a)的集合.Linux下的大多数函数都默认将头文件放到/usr/include/目录下,而库文件则放到/usr/lib/目录下,但并非绝对如此.因此GCC设有添加头文件和库文件的编译选项开关. 1. 添加头文件:-I 例如在/home/work/include/目录下有编译foo.c所需头文件def.h,为了让GCC能找到它们,就需要使用-I选项: $ gcc foo.c -I /home/work/include/def.h -o foo 2. 添加库文件:-L 例如在/home/work/lib/目录下有链接所需库文件libdef.so,为了让GCC能找到它们,就需要使用-L选项: $ gcc foo.c -L /home/work/lib -ldef.a -o foo 说明:-l选项指示GCC去连接库文件libdef.so.Linux下的库文件命名有一个约定,即库文件以lib三个字母开头,因为所有的库文件都遵循这个约定,故在用-l选项指定链接的库文件名时可以省去lib三个字母. [题外语] Linux下的库文件分为动态链接库(.so文件)和静态链接库(.a文件).GCC默认为动态库优先,若想在动态库和静态库同时存在的时候链接静态库需要指明为-static选项.比如上例中如还有一个libdef.a而你想链接libdef.a时候命令如下: $ gcc foo.c -L /home/work/lib -static -ldef.a -o foo
gcc简单命令记录
最新推荐文章于 2023-07-17 16:52:02 发布