linux下创建共享库和静态库

本文档详细介绍了如何在Linux环境下构建共享库和静态库的过程。包括使用gcc编译器进行预处理、编译、链接等步骤,以及解决链接错误、配置库路径等问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

学习笔记:

创建共享库
我的当前目录下有 add.c sub.c main.c
//1
gcc -fPIC -c add.o sub.o // -c 只编译不连接 // -fPIC 参数表示,生成的.o文件 内容都是相对地址*
生成libdong.so.1.1 这个库
gcc -shared -Wl,-soname,libdong.so.1 -o libdong.so.1.1 add.o sub.o // libdong.so.1.1 前面1是大版本号,后面1是小版本号
生成可执行文件
gcc main.c libdong.so.1.1 -o main

//2
然后执行 ./main
会报错:./main: error No such file or directory 找不到库

//3
ldd a.out // ldd 查看 a.out 依赖哪些库?
linux-vdso.so.1 => (0x00007ffce05f6000)
libdong.so.1 => not found 找不到库
libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f5beda4c000)
/lib64/ld-linux-x86-64.so.2 (0x00005636af218000)

//4
加入库的路径
sudo vim /etc/ld.so.conf
sudo ldconfig -v 更新库

//有几个需要注意的地方
1. /etc/ld.so.conf 中有 include /etc/ld.so.conf.d/*.conf 不能在下一行也写 include 错了都不知道咋错的
下一行直接写 路径
2. /mnt/hgfs/ 中是win和linux共享的 有些东西linux无法访问,无法执行。当初看内核代码也有这个原因
把库copy到别的地方去

创建静态库

//1.使.o文件是以相对路径编译的
gcc -c -fPIC add.c sub.c

//2.创建静态库
ar rcs libmy.a add.o sub.o //ar命令可以用来创建、修改库,也可以从库中提出单个模块
//c:创建一个库。不管库是否存在,都将创建。
//s:写入一个目标文件索引到库中,或者更新一个存在的目标文件索引。

nm libmy.a看一下文件的符号

//3.使用库
gcc main.c ./lib/libmy.a -o main
./main

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值