gcc编译命令小结

写在前面:

在几年前,我是使用c/c++作为主力开发语言。一晃几年过去,现在已投入java开发阵营。今天翻看以前的笔记时,看到了这篇,觉得依然有价值,遂记录下来做个备忘。

gcc编译参数

gcc是一款c语言的编译器。
在这个IDE大行其道的时代,使用gcc这些命令行的编译器,反而如一股清风,提供了一种小而美的选择。

gcc编译一个c文件的过程,会经过几个步骤:预编译,编译,汇编,链接。下面是每一步用到的参数和命令:

-E:预编译, 讲带#的语句重新展开到制定文件中,比如#define, #include "*.h"

gcc -E main.c -o main.i

-S:编译,将.o文件编译成编译成汇编文件(.s文件)

gcc -S main.c -o mian.s

-c:汇编,相比-S命令,多了assemble,生成目标文件(.o文件)

gcc -c main.c -o mian.o

最后,也是最常用的,就是不加任何参数,会将.c文件直接编译成可执行文件或.o文件。相比前一步,多了“链接”(多个文件同时编译成一个可执行文件)

gcc main.c -o main

-std:使用哪个c语言标准编译

// 使用c99编译
gcc -std=c99 
// 使用gnu99(c99的gnu扩展)编译
gcc -std=gnu99

编译静态库

gcc -c hello.c -o hello.o
ar -r libhello.a hello.o hello2.o  ( 静态库名称规则: lib+名字+.a(), 否则在使用-l链接的时候会找不到)
gcc main.c libhello.a -o main
// 或者:
gcc -L ./ main.c -lhello -o main  (-L制定库的搜索路径,-l调用链接库)

.a表示archive归档。ar类似于tar,起打包的作用。

编译动态库

gcc -c -fpic hello.c (fpic:采用浮动地址)
gcc -shared hello.o -o hello.so  (.so告诉编译器编译成动态库,省略的话会编译成exe)
合并:gcc -fpic -shared hello.c -o hello.so

你可能感兴趣的:(gcc编译命令小结)