GCC的一些基本用法_待补充

GCC: GNU C Compiler; GNU Compiler Collection

常用基本命令

gcc test.c -o test

上述编译过程分为

预处理 Preprocessing
gcc -E test.c -o test.i 或 gcc -E test.c

gcc的-E选项,可以让编译器在预处理后停止,并输出预处理结果。

编译 Compilation
gcc -S test.i -o test.s

gcc的-S选项,表示在程序编译期间,在生成汇编代码后,停止,-o输出汇编代码文件。

汇编 Assembly
gcc -c test.s -o test.o
连接 Linking
gcc test.o -o test

将程序的目标文件与所需的所有附加的目标文件连接起来,最终生成可执行文件。附加的目标文件包括静态连接库和动态连接库。

编译多个文件

如果程序多个源文件,并且最终生成可执行文件test

gcc test1.c test2.c -o test

若同时处理的文件不止一个,那么GCC依旧会按照预处理,编译,链接的过程进行:

上述命令相当于依次执行

gcc -c test1.c -o test1.o
gcc -c test2.c -o test2.o
gcc test1.o test2.o -o test

Debug

gcc -Wall illcode.c -o illcode

使用 -Wall 能够使GCC产生尽可能多的警告信息。

gcc -Werror test.c -o test

使用 -Werror 可以让GCC在所有产生警告的地方停止编译。

链接库文件

在linux中,大多数函数的头文件会被放到 /usr/include 中,库文件一般放在 /usr/lib中。

在linux中,库文件分为两类,分别是 动态链接库 .so ,和 静态链接库 .a。两者的区别在于程序执行时所需的代码是在运行时动态加载的,还是在编译时静态加载的。

编译成可执行文件

gcc –c –I /usr/dev/mysql/include test.c –o test.o

链接

gcc –L /usr/dev/mysql/lib –lmysqlclient test.o –o test

默认情况下,GCC链接时优先使用静态链接库,只有在动态链接库不存在的时候才使用静态链接库,如果需要强制使用静态链接库,那么加入 -static

静态库链接时搜索路径顺序:
  1. ld会去找GCC命令中的参数-L
  2. 再找gcc的环境变量LIBRARY_PATH
  3. 再找内定目录 /lib /usr/lib /usr/local/lib 这是当初compile gcc时写在程序内的
动态链接时、执行时搜索路径顺序:
  1. 编译目标代码时指定的动态库搜索路径
  2. 环境变量LD_LIBRARY_PATH指定的动态库搜索路径
  3. 配置文件/etc/ld.so.conf中指定的动态库搜索路径
  4. 默认的动态库搜索路径/lib
  5. 默认的动态库搜索路径/usr/lib
有关环境变量:

LIBRARY_PATH 环境变量:指定程序静态链接库文件搜索路径

LD_LIBRARY_PATH 环境变量:指定程序动态链接库文件搜索路径


Reference

https://www.cnblogs.com/ggjucheng/archive/2011/12/14/2287738.html

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值