gcc : Linux 编译相关整理

gcc

1、一个C/C++文件的编译过程,经过

    预处理(preprocessing)  -> 编译(compilation) -> 汇编(assembly) -> 链接(linking)

    . 文件 -> .s 文件 -> .o 文件 -> 可执行文件


示例:

(1)预处理,生成预编译文件 ( . 文件)

     gcc -E hello.c -o hello.i


(2)编译,生成汇编代码 ( .s 文件)
    gcc -S hello.i -o hello.s


(3)汇编,生成目标文件 (.o 文件)
    gcc -C hello.s -o hello.o


(4)链接,生成可执行文件
    gcc hello.o -o hello


一步到位 :gcc hello.c -o hello

 2、编译选项

常用选项

-v                 查看gcc编译器的版本,显示gcc执行时的详细过程

-o <file>      指定输出文件名为file

-E                 只预处理,不编译、汇编、链接

-S                只编译,不会汇编和链接

-C                编译和汇编,不会链接

-g                编译[debug]版本       gcc hello.c -g -o hello

-o1/o2/o3   编译[优化]

3、

Q1:如果 .h 文件和 .c 文件不在同一级目录,怎么编译?假设hello.h在hello.c的上一级目录

Q2:如果 hello 需要使用 libpthread.so 中的函数?

Q3:如果 hello 需要使用 /home/lib 中的 libtest.so 中的函数?

-----------------------------------------------------------------------------------------------

A1:  

gcc hello.c -o hello -I.. 
编译选项 -I : 指定后面的路径为优先寻找头文件的目录路径

A2:

gcc hello.c -o hello -I.. -lpthread
编译选项 -l (-lpthread) : 寻找动态链接库文件libpthread.so(也就是文件名去掉前缀和后缀所代表的库文件,即指定 库 的名称)

A3:

gcc hello.c -o hello -I.. -L/home/lib -ltest
编译选项 -L : 指定 库的路径






猜你喜欢

转载自blog.csdn.net/zxj820/article/details/80343612