Linux系统编程学习日记(三)GCC其他常用参数和静态库的制作级应用

一、GCC其他常用参数应用

1、GCC其中的一些参数

(1)、-I 指定头文件的包含目录

gcc  -I  ./include -o app	//./include为路径(可以为相对路径也可为绝对路径)

包含头文件编译

(2)、 -c 编译子程序,生成.o文件
编译一个子程序
在这里插入图片描述
编译目录下所有子程序,包含头文件

在这里插入图片描述 子程序生成.o文件

(3)、 -o
最基本的

gcc -o main.c main

(4)、 -D 指定宏

gcc  -D   DEBUG   -I  ./include  -o  app
 #ifdef DEBUG
       //please input
 #endif 

在这里插入图片描述所有子程序加上DEBUG调试
在这里插入图片描述
(5)、 -g 增加GDB调试信息
GDB简介:
GDB主要帮忙你完成下面四个方面的功能:
1.启动你的程序,可以按照你的自定义的要求随心所欲的运行程序。
2.可让被调试的程序在你所指定的调置的断点处停住。(断点可以是条件表达式)
3.当程序被停住时,可以检查此时你的程序中所发生的事。
4.动态的改变你程序的执行环境。
(6)、 -Wall 编译时输出警告信息
(7)、 -O 代码优化,取值为0-3
值越大,优化越好

二、静态库的制作级应用

1.静态库的制作

1>. 命名规则
1). lib + 库的名字 + .a
2). libmytest.a
2>. 制作步骤:
1). 生成对应的.o文件 gcc -c
2). 将生成的.o文件打包 ar rcs + 静态库的名字(libMytest.a) + 生成的所有的.o
3>. 发布和使用静态库:
1). 发布静态库
2). 头文件
4>. 优点:
(1)发布程序时,不需要提供库
(2)加载速度快
5>.缺点
(1)库打包到应用程序中,体积大
(2)一旦库发生变化,就需要重新编译
过程演示:
建立目录include、src、lib三个目录
在src目录中编写四个子函数文件,使用gcc *.c -c生产.o文件
使用ar命令打包 ar rcs libMyLib.a *.o
移动libMyLib.a文件到lib目录
将lib和include目录中的内容发布
新建main.c文件,使用自定义库生成可执行文件,gcc main.c lib/libMyLib.a -o main
另一种写法:
Gcc main.c -I ./include -L lib -l MyLib -o main
[ -L 指定链接库目录 -l 指定静态库名称 ]
注:使用nm命令可以看静态库文件和可执行文件

2. 共享库的制作:

1>. 命名规则:
1). lib + 名字 + .so
2>. 制作步骤:
1). 生成与位置无关的代码 (生成与位置无关的.o)
2). 将.o打包成共享库(动态库)
3>. 发布和使用共享库:
4>. 解决程序执行时动态库无法被加载的问题:
1). 放到系统的库目录 中 – 不允许使用
2). 临时测试
环境变量: LD_LIBRARY_PATH=将动态库的路径设置给该变量
将设置的值, 导入到系统环境变量中: export LD_LIBRARY_PATH
当终端关闭, 设置会失效
3). 不常用的方法(永久设置):
在家目录的 .bashrc文件 中添加一句话: export LD_LIBRARY_PATH=动态库目录的绝对路径
.bashrc修改完成, 需要重启终端
4).
1. 需要找动态连接器的配置文件 – /etc/ld.so.conf
2. 动态库的路径写到配置文件中 – 绝对路径
3. 更新 – sudo ldconfig -v
tar zxvf
tar jcvf

5>. 优缺点:
体积小
动态库更新,接口不变化时,不需要重新编译

过程:
使用Gcc -fPIC -c *.c生产.o文件【与位置无关】
生产动态库Gcc -shared libMyLib.so *.o
生成可执行文件Gcc main.c lib/libMyLib.so -o main
生成可执行文件Gcc main.c -L lib -l MyLib -o main
Ldd命令查询可执行文件的动态库 ldd main

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值