linux下创建共享库和静态库

来源:互联网 发布:邯郸学院软件学院 编辑:程序博客网 时间:2024/05/21 06:58

学习笔记:

创建共享库
我的当前目录下有 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

0 0
原创粉丝点击