gcc编译程序过程

  • gcc 常用选项
选项名	作用
-o	产生目标(.i、.s、.o、可执行文件等)
-c	通知gcc取消链接步骤,即编译源码并在最后生成目标文件
-E	只运行c预编译器
-S	告诉编译器产生汇编语言文件后停止编译,产生的汇编语言文件扩展名为.s
-Wall	使gcc对源文件的代码有问题的地方发出警告
-Idir	将dir目录加入搜索文件的目录路径
-Ldir	将dir目录加入搜索库的目录路径
-llib	连接lib库
-g	在目标文件中嵌入调试信息,以便gdb之类的调试程序调试
  • gcc 示例:

gcc -E hello.c -o hello.i(预处理)

gcc -S hello.i -o hello.s(编译)

gcc -c hello.s -o hello.o(汇编)

gcc hello.o -o hello(链接)

gcc hello.c -o hello(直接编译链接成可执行目标文件)

gcc -c hello.c 或 gcc -c hello.c -o hello.o(编译生成可重定位目标文件)

  • gcc 编译多文件示例:

hello_fn.h

hello_fn.c

main.c

一次性编译:

gcc hello_fn.c main.c -o newhello

独立编译:

gcc -Wall -c main.c -o main.o

gcc -Wall -c hello_fn.c -o hello_fn.o

gcc -Wall main.o hello_fn.o -o newhello

  • 使用外部库(-l 选项)

gcc -Wall calc.c -o calc -lm  (-lm 表示要链接libm.so或者libm.a库文件)

静态库(.a):程序在编译链接的时候把库的代码链接到可执行文件中。程序运行的时候将 不再需要静态库

共享库(.so或.sa):程序运行的时候才去链接共享库的代码,多个程序共享使用库的代码。

  • 生成静态库:

ar rcs libhello.a hello_fn.o(ar是gun归档工具,rcs表示replace and create)

gcc -Wall main.c libhello.a  -o main

gcc -Wall -L. main.c -o main -lhello

  • 生成共享库:

gcc -shared -fPIC hello.o -o libhello.so

shared:表示生成共享库格式 fPIC:产生位置无关码(position independent code)

gcc main.o -o main -L. -lhello

l:链接共享库,只要库名即可(去掉lib以及版本号)

L:链接库所在的路径


发布了32 篇原创文章 · 获赞 13 · 访问量 7万+

猜你喜欢

转载自blog.csdn.net/my_flash/article/details/80468615
今日推荐