使用g++创建动态库和静态库及其相关探索
目录
使用g++创建动态库和静态库及其相关探索
0.前期准备
1.静态库创建及链接
2.动态库创建及链接
3.相关问题
移动动态库后仍不能运行
0.前期准备
首先我们建立头文件 “hello.h”
内容如图:
随后我们建立源文件 “hello.cpp”
内容如图:
最后我们建立源文件 “main.cpp”
内容如图:
我们使用 g++ -c 编译出.o文件。
无论是动态库还是静态库,都得由.o文件创建,所以我们先编译出.o文件。
结果如图:可以看到有 hello.o 文件
1.静态库创建及链接
使用 ar crv 命令创立静态库。
结果如图:建立出了静态库文件 libmyhello.a ,静态库文件后缀为.a 。
使用 g++ 命令链接静态库
g++ main.cpp libmyhello.a -o main
结果如图:生成了可执行文件main,且可以正常运行。
删除静态库libmyhello.a,程序仍能运行,说明链接成功。
结果如图:
2.动态库创建及链接
使用 -shared -fPCI 命令创立动态库。
结果如图:建立出了动态库文件 libtest.so ,动态库文件后缀为.so 。
使用 g++ 命令链接动态库
g++ main.cpp -L. -ltest -o main
/*
-L代表so库目录,“-L.” 是当前目录, -I代表引用文件目录。main即为可执行文件
*/
结果如图: 生成可执行文件main
运行程序
直接运行会报错:缺少文件。我们将动态库移动到/usr/lib 中即可
mv libtest.so /usr/lib
随后即可正常运行(如果移动后仍不能运行,请看下文)
软链接
🌟****在 Linux 下有两种链接方法可以帮助我们更快地访问到存于某个位置的文件,即****软链接****与****硬链接****。
🌟****首先是软链接,软链接又叫做符号链接,我们通过**** ln -s**** 命令进行创建。
ln -s 原文件路径 软链接名
[oracle@Linux]$ touch f1 #创建一个测试文件f1
[oracle@Linux]$ ln f1 f2 #创建f1的一个硬连接文件f2
[oracle@Linux]$ ln -s f1 f3 #创建f1的一个符号连接文件f3
[oracle@Linux]$ ls -li # -i参数显示文件的inode节点信息
3.相关问题
移动动态库后仍不能运行
1.首先进入 /etc/ld.so.conf 文件
vim /etc/ld.so.conf
2.修改内容为如下
include /etc/ld.so.conf.d/*.conf
3.进入目录,创建任意*.conf文件
cd /etc/ld.so.conf.d
vim mylib.conf
4.在其中添加so的路径即可
/usr/lib
5.执行命令使其生效
sudo ldconfig
随后程序即可正常运行