GCC学习笔记

        参考资料:GCC编译C(C++)静态库、动态库

                          Linux基础——gcc编译、静态库与动态库(共享库) 

            


        标题 : 工作流程

                源文件(*.c/*.cpp) -> 预处理(*.i) -编译(*.S/*.s) -> 汇编(*.o) -> 链接(可执行文件)

                预处理:修改*.c/*.cpp,展开预处理指令(#define、#if、#else、#elif、#ifdef、#ifndef、#undef、#endif、#error、#program),生成*.i文件

                编译: 将*.i文件编译为*.S/*.s文件,即汇编文件

                汇编: 将*.S/*.s汇编文件翻译成机器语言,即*.o文件 

                链接: 合并文件,生产可执行文件

        标题2 : 命令介绍

                1. 预处理:gcc  -E  源文件(*.c)  -o  目标文件(*.i)

                 2. 编译:gcc  -S  源文件(*.i)  -o  目标文件(*.s)

                 3. 汇编: gcc  -c  源文件(*.s)  -o  目标文件(*.o)

                 4.  查看gcc版本号: -v

                 5.  指定静态库/动态库路径:  -L  静态库/动态库路径

                 6.  指定静态库/动态库名称:-l(小写L)  静态库/动态库名称

                 7.  指定头文件路径:-I(大写i)  头文件路径

                 8.  添加调试信息(gdb调试用):-g

                 9.  制作静态库:ar rcs  *.a  *.o

                 10.  制作动态库:-shared 

                 11.  优化:-O0/-O1/-O2/-O3

                 12. 提示更多错误信息: -Wall

 

        标题3 : 单文件/多文件编译

                1. 单文件: gcc  源文件.c  -o  可执行文件

                2. 多文件: gcc  源文件1.c  源文件2.c  ...  -o  可执行文件

        标题4 : 静态库编译及使用

                1. 生成静态库

                ar  rcs  目标文件.a  源文件.o

                2. 使用静态库

                方法1:gcc  源文件.c  -L  静态库路径  -I静态库名称  -I  头文件路径  -o  可执行文件

                方法2:gcc  源文件.c  静态库.a  -I  头文件路径  -o  可执行文件

 

        标题5 : 动态库编译及使用

                1. 生成动态库

                gcc  -c  -fpic  源文件.c  -o  目标文件.o

                gcc  -shared  源文件.o  -o  目标文件.so

                2. 使用动态库   

                方法1: gcc  源文件.c  -I  头文件路径  动态库.so  -o  可执行文件

                方法2: gcc  源文件.c  -L  动态库路径  -l动态库名称  -I  头文件路径  -o  可执行文件

                 使用方法2链接生成的可执行文件执行会报找不到动态库的错误,调用   diff + 可执行文件   可以查看依赖项,发现动态库找不到,添加环境变量即可:

export LD_LIBRARY_PATH=动态库路径   

 

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值