这里写目录标题
GCC/G++
GCC/G++工作流程
预处理: 展开头文件,删除注释,宏替换
Liux下静态库的制作
- 利用gcc/g++ -c命令获得.o文件
- 将需要的.o文件利用ar rcs命令打包成静态库
Linux下动态库制作
当我们使用自己打包的动态库时,会出现找不到动态库的问题,到导致可以生成可执行文件却无法运行
解决方法一:添加环境变量LD_LIBRARY_PATH
在终端输入
export LD_LIBRARY_PATH = $LD_LIBRARY_PATH : 这里填写动态库路径
例如
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/home/yusa/Linux/Test/lib
可以用命令查看是否添加成功
echo $LD_LIBRARY_PATH
输出为
:/home/yusa/Linux/Test/lib
缺点:当我们关闭这个终端重新打开这个终端时(比如重启电脑),我们之前配置的环境变量就会失效,又要重新配置
下面介绍永久配置环境变量(分为用户级别的配置和系统级别的配置)
用户级别的配置
yusa@yusa:~/Linux/Test$ cd
yusa@yusa:~$ vim .bashrc
进入bashrc的界面,接下来shift + g跳到最后一行,按o增加一行输入命令,保存并退出
export LD_LIBRARY_PATH = $LD_LIBRARY_PATH : 这里填写动态库路径
例如
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/home/yusa/Linux/Test/lib
更新并使修改生效
. .bashrc或 source .bashrc
系统级别的配置
yusa@yusa:~/Linux/Test$ cd
yusa@yusa:~$ sudo vim /etc/profile
接下来的操作与用户级别配置一样
解决方法二:修改 /etc/ld.so.cache文件
终端输入
sudo vim /etc/ld.so.conf
任然是将之前的路径添加进去(这一次仅添加路径),保存并推出更新
sudo ldconfig
静态库与动态库总结
- 静态库由于是已经和程序打包在一起了,因此加载速度快,同时,发布的时候也不用提供静态库,移植方便
- 由于静态库和程序打包在一起,程序的大小会增加,多份程序可能使用一样的静态库,而多份一样的静态库可能同时出现在内存中,造成内存浪费
- 静态库的修改会导致整份程序要重新编译,导致部署,发布麻烦
- 动态库可以实现进程间资源共享(共享库)
- 动态库修改时只需编译修改的动态库即可,源程序无需参与编译,比较简单。但发布程序时需提供依赖的动态库
- 可以控制何时加载动态库,但加载速度比静态库慢