Linux 库总结
来源:互联网 发布:淘宝卖家不说话怎么办 编辑:程序博客网 时间:2024/04/27 14:21
1. 基础知识
1.1. 查看程序调用的库
ldd /bin/ls
1.2. 查看动态库包含的函数:
nm -D /lib64/libc.so.6
1.3. 查看静态库包含的.o文件:
ar -t libgcc.a
1.4. 查看库的位数
file /lib64/libc-2.12.so
1.5. 查看库的soname
readelf -d /lib64/libc.so.6 | grep soname
soname相关知识,可参考[1]
1.6. gcc
-L # 编译时搜索库的位置
-Wl,-rpath # 运行时搜索库的位置
-static # 同时有静态库和动态库时,会先调用动态库,如果要链接静态库,需要加上-static参数
-z nodefaultlib # 编译选项禁止搜索缺省路径。
2. 编译时库是如何链接的?
gcc -g -Wl,-rpath=/home/lib -o main main.c -L/work/c/lib -lpr
a. 编译时,编译器会根据-L指定的目录,去/work/c/lib下寻找libpr.so文件
b. 读取libpr.so文件中的soname,并记录在可执行文件main中
c. 运行时main根据记录的soname去目录/home/lib中寻找匹配的库文件。
资料来源[2]
3. 运行时库是如何链接的?
3.1. 运行时库的链接顺序
a. 编译目标代码时指定的动态库搜索路径,gcc通过-Wl,rpath参数指定;
b. 环境变量LD_LIBRARY_PATH指定的动态库搜索路径;
c. 配置文件/etc/ld.so.conf中指定的动态库搜索路径;
d. 默认的动态库搜索路径/lib;
e. 默认的动态库搜索路径/usr/lib。
/etc/ld.so.conf中的配置对全局用户生效,加入库的链接,可以通过修改/etc/ld.so.conf实现,用root用户运行:
# echo "/home/lib" >> /etc/ld.so.conf
# ldconfig
运行ldconfig 将 /etc/ld.so.conf 加载到/etc/ld.so.cache中,避免重启系统就可以立即生效。
参考资料:
[1] http://blog.csdn.net/alspwx/article/details/36655645
介绍了库的命名规范和库的版本控制
[2] http://blog.csdn.net/littlewhite1989/article/details/47726011
介绍了编译时库是如何链接的
[3] http://blog.csdn.net/thinkerabc/article/details/628315
介绍了运行时库是如何链接的
1.1. 查看程序调用的库
ldd /bin/ls
1.2. 查看动态库包含的函数:
nm -D /lib64/libc.so.6
1.3. 查看静态库包含的.o文件:
ar -t libgcc.a
1.4. 查看库的位数
file /lib64/libc-2.12.so
1.5. 查看库的soname
readelf -d /lib64/libc.so.6 | grep soname
soname相关知识,可参考[1]
1.6. gcc
-L # 编译时搜索库的位置
-Wl,-rpath # 运行时搜索库的位置
-static # 同时有静态库和动态库时,会先调用动态库,如果要链接静态库,需要加上-static参数
-z nodefaultlib # 编译选项禁止搜索缺省路径。
2. 编译时库是如何链接的?
gcc -g -Wl,-rpath=/home/lib -o main main.c -L/work/c/lib -lpr
a. 编译时,编译器会根据-L指定的目录,去/work/c/lib下寻找libpr.so文件
b. 读取libpr.so文件中的soname,并记录在可执行文件main中
c. 运行时main根据记录的soname去目录/home/lib中寻找匹配的库文件。
资料来源[2]
3. 运行时库是如何链接的?
3.1. 运行时库的链接顺序
a. 编译目标代码时指定的动态库搜索路径,gcc通过-Wl,rpath参数指定;
b. 环境变量LD_LIBRARY_PATH指定的动态库搜索路径;
c. 配置文件/etc/ld.so.conf中指定的动态库搜索路径;
d. 默认的动态库搜索路径/lib;
e. 默认的动态库搜索路径/usr/lib。
资料来源[3]
3.2. /etc/ld.so.conf/etc/ld.so.conf中的配置对全局用户生效,加入库的链接,可以通过修改/etc/ld.so.conf实现,用root用户运行:
# echo "/home/lib" >> /etc/ld.so.conf
# ldconfig
运行ldconfig 将 /etc/ld.so.conf 加载到/etc/ld.so.cache中,避免重启系统就可以立即生效。
参考资料:
[1] http://blog.csdn.net/alspwx/article/details/36655645
介绍了库的命名规范和库的版本控制
[2] http://blog.csdn.net/littlewhite1989/article/details/47726011
介绍了编译时库是如何链接的
[3] http://blog.csdn.net/thinkerabc/article/details/628315
介绍了运行时库是如何链接的
0 0
- Linux 库总结
- Linux库文件知识总结
- Linux共享库简单总结
- linux 总结
- linux总结
- LINUX总结
- linux总结
- linux总结
- linux总结
- Linux总结
- Linux总结
- Linux总结
- Linux 总结
- linux总结
- linux总结
- linux 总结
- linux总结
- LINUX总结
- Ubuntu下修改环境变量的三种方法
- 浏览器缓存知识及应用
- spring @Qualifier注解
- Jquery选择器
- 手动实现Aop
- Linux 库总结
- 好心情才会有好风景
- 教你十分钟快速搭建springBoot项目实战
- hadoop HDFS存储原理
- 操作系统(1)—操作系统概述
- 第二章 UI开发——Android 布局类型
- mac 上面安装并且启动mongodb
- Iterator为什么不能对容器的进行添加或修改操作(可以删除)
- 什么是Mixin模式:带实现的协议