打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
Linux下编写简单的动态库.静态库

前言

本文讲述了Linux下编写动态库以及测试过程,读者可以根据这个过程编写自己的动态库.
本次使用两个.c文件编译成库.

动态库

.h文件

//.h文件   libtest_so.h
#ifndef _LIBTEST_SO_H_
#define _LIBTEST_SO_H_
h
#include <stdio.h>

void testA();
void testB();

#endif

.c文件

//.c文件   testA.c
#include 'libtest_so.h'

void testA()
{
        printf('this is test A\n');
}
//.c文件   testB.c
#include 'libtest_so.h'

void testB()
{
        printf('this is test B\n');
}

编译库命令

gcc -shared -fPIC -o libtest.so testA.c testB.c 

注意

到此为止,我们的动态库libtest.so就编译成功了,需要注意的是编译成的库的名字必须以lib开头

测试

//测试程序  test.c
#include 'libtest_so.h'

void main(){

        testA();
        testB();
}

编译测试程序命令

gcc test.c -L. -ltest -o test
(-L.)表示需要的库在当前目录
(-ltest)链接我们的动态库

问题

编译完测试程序再./test运行时会发生如下错误,原因是因为我们编译的动态库还未加载.

./test: error while loading shared libraries: libtest.so: cannot open shared object file: No such file or directory

此时我们可以运行ldd ./test来查看,经查看显示:

	~# ldd ./test
	linux-vdso.so.1 (0x00007ffc4d8c3000)
	libtest.so => not found
	libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f1ebf2ef000)
	/lib64/ld-linux-x86-64.so.2 (0x00007f1ebf4fb000)

解决

打开终端输入vim /etc/ld.so.conf,进入文件后,在文件末尾添加你编译的动态库所在的路径,作者的库在/my/lib所以添加/my/lib就好.路径添加完成后,再在终端输入/sbin/ldconfig -v进行刷新.刷新后我们重新运行ldd ./test会发现原来的libtest.so => not found已经没有,此时的测试程序也能正常运行了.

	~# ldd ./test
	linux-vdso.so.1 (0x00007ffed2bff000)
	libtest.so => /my/lib/libtest.so (0x00007fb9d47ef000)
	libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007fb9d45fd000)
	/lib64/ld-linux-x86-64.so.2 (0x00007fb9d480e000)
	~#./test
	this is test A
	this is test B

总结

最后加载动态库的方法不止一种,还有一种是添加环境变量,不过有的版本会出现命令不识别的情况,所以在此就推荐这一种.

静态库

静态库除了编译成库命令和动态库不一样,其他的皆可参考上面动态库的方法;
采用上面的文件编译成静态库libtest.a

编译命令

//先将需要的.c文件编译成.o
gcc -c testA.c testB.c
//将上述编译的.o文件编译成静态库
ar -cr libtest.a *.o
本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
Linux下静态链接库和动态链接库的使用
静态库&动态库
Linux静态链接(库)、动态链接(库)、可执行文件加载相关问题(创建、选项、环境变量等)
linux下.a/.so/.la目标库区别
linux下生成.so文件和.a文件
函数库:静态库和动态库
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服