3-共享库的创建与使用
来源:互联网 发布:Rstudio server mac 编辑:程序博客网 时间:2024/06/06 02:06
1. 编写代码
int add(int a, int b) {return a + b;}int sub(int a, int b) {return a - b;}# base.h的内容int add(int, int);int sub(int, int);#include<stdio.h>#include "base.h"int main() {printf("10 + 20 = %d\n", add(10, 20));printf("20 - 10 = %d\n", sub(20, 10));return 0;}
2. 生成动态库
gcc -c -fpic add.c sub.cgcc -shared add.o sub.o -o libbase.so或gcc -fpic -shared add.c sub.c -o libbase.so
3. 使用动态库
方式1:执行如下两条命令会再当前目录下生成main程序
gcc -c main.cgcc main.o ./libbase.so -o main执行ldd main命令可以看到main链接库的信息ldd mainlinux-vdso.so.1 => (0x00007ffec5bb7000)libbase.so (0x00007fddb700e000)libc.so.6 => /usr/lib64/libc.so.6 (0x00007fddb6c31000)/lib64/ld-linux-x86-64.so.2 (0x00007fddb7211000)
方式2:执行如下命令生成main程序
注意:此处与上面的方式不同之处在于指定链接库路径及链接库名称
gcc -c main.cgcc main.o -L. -lbase -o main
生成main之后, 执行ldd main查看链接库信息ldd mainlinux-vdso.so.1 => (0x00007fff78bb1000)libbase.so => not foundlibc.so.6 => /usr/lib64/libc.so.6 (0x00007fefcd5ea000)/lib64/ld-linux-x86-64.so.2 (0x00007fefcd9c8000)
不难看出, 如上的方式生成的可执行文件main, 在使用ldd查看时, 提示libbase.so未找到
这是因为-L及-l选项只是告诉编译器库的名字, 而在目标系统支持的情况下, fpic会生成与位置无关的代码
因此实际上编译之后的main中并未记录libbase.so的位置, 仍在系统默认的路径查找
可以使用如下方式进行解决export LD_LIBRARY_PATH = /home/developer/c/或export LD_LIBRARY_PATH = /home/developer/c/libbase.so再次使用ldd main查看时, 就不会报错not foundldd mainlinux-vdso.so.1 => (0x00007ffd767ad000)libbase.so => /home/developer/c/libbase.so (0x00007f50e3154000)libc.so.6 => /usr/lib64/libc.so.6 (0x00007f50e2d77000)/lib64/ld-linux-x86-64.so.2 (0x00007f50e3357000)
当然也可以配置系统的ld.so.conf文件进行配置, 配置之后执行ldconfig命令即可
以上内容, 如有错误, 欢迎批评指正。
阅读全文
0 0
- 3-共享库的创建与使用
- 3-共享库的创建与应用
- linux共享函数库的创建与使用
- 共享文件夹的创建与使用
- linux下动态共享库的创建,使用与更新(包括ldconfig的使用)
- linux下动态共享库的创建,使用与更新(包括ldconfig的使用)
- linux下动态共享库的创建,使用与更新(包括ldconfig的使用)
- linux下动态共享库的创建,使用与更新(包括ldconfig的使用)
- Linux共享库so文件创建与使用
- linux下动态共享库的创建,使用与更新(包括ldconfig的使用)g++ -WI -soname
- Linux共享库的加载与使用
- 共享库的生成与使用
- 静态函数库与动态函数库(共享库)的创建
- 静态库、共享库、动态库的创建和使用
- 静态库、共享库、动态库的创建和使用
- 静态库、共享库、动态库的创建和使用
- 静态库、共享库、动态库的创建和使用
- 静态库、共享库、动态库的创建和使用
- svn的使用
- spring boot web开发中模拟发送http请求的前端单元测试方法
- Spring配置连接池和dao使用JdbcTemplate
- Marc Andreessen的创业指南
- 深度学习的起源、发展和现状
- 3-共享库的创建与使用
- java中final关键字的用法
- 递归算法详解
- 时间戳转化为几天前,几小时前,几分钟前
- spark--transform算子--repartition
- 关于“智能革命”的分析与思考
- Web Api post 接受 Json 爱信不信
- 转 PHP支付宝接口RSA验证
- eclipse安装SVN插件