gcc笔记

一、.c文件到app的过程

二、执行选项

gcc -E -o hello.i hello.c //预处理:展开宏,查看头文件

gcc -S -o hello.s hello.i//编译:形成汇编码

gcc -c -o hello.o hello.s//汇编:形成机器码

gcc -o hello hello.o//链接

补充:
gcc -c -o test.o test.c -V//会列出去查找哪些头文件目录

三、形成过程

四、语法错误,函数申明定义检查时间

编译时(-S选项)会检查语法错误和函数是否申明,不会检查函数是否定义

链接时会检查函数定义

五、头文件查找路径

#include <stdio.h>

<>表示去系统,工具链指定的目录查找头文件,但可以使用-I选项来指定目录。

#include “sub.h”

“”在当前目录查找头文件

六、比较有用的选项

gcc -E main.c  // 查看预处理结果,比如头文件是哪个

gcc -E -dM main.c > 1.txt  // 把所有的宏展开,存在 1.txt 里

gcc -Wp,-MD,abc.dep -c -o main.o main.c  // 生成依赖文件 abc.dep,后面 Makefile 会用

echo 'main(){}' | gcc -E -v -  // 它会列出头文件目录、库目录 (LIBRARY_PATH)

七、生成动态库和静态库

静态库:

gcc -c main.o main.c
gcc -c sub.o sub.c
ar crs libsub.a sub.o sub2.o sub3.o(可以使用多个.o 生成静态库)
gcc -o test main.o libsub.a

 动态库:

gcc -c main.o main.c
gcc -c sub.o sub.c
gcc -shared -o libsub.so sub.osub2.o sub3.o(可以使用多个.o 生成动态库)
gcc -o test2 main.o libsub.so

通常使用gcc -o test2 main.o -lsub链接,可简写库名称,但此时会报错找不到库,因为默认寻找库是在/lib或者/usr/lib

此时需用

gcc -o test2 main.o -L ./ -lsub

使用-L指定库的目录,使用-l指定库文件目录

八、运行

运行./test会报错找不到库,因为库默认是在/lib或者/usr/lib

两种解决办法:

1.将库放到lib里面

2.指定路径export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:动态库路径

第二种方法会先在LD_LIBRARY_PATH找,找不到后再在(动态库路径)找

九、总结

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值