设为首页 加入收藏

TOP

Linux函数库操作相关
2014-11-24 03:29:30 来源: 作者: 【 】 浏览:0
Tags:Linux 函数 操作 相关

1.连接函数库时搜索路径


搜索路径顺序:LD_LIBRARY_PATH --> /etc/ld.so.conf --> /lib,/usr/lib


命令:


ldconfig:为/etc/ld.so.conf文件中包含的路径和默认路径/lib,/usr/lib下的函数库创建soname库,并把soname库及其指向信息写入文件/etc/ld.so.cache。


ldconfig 路径名:为指定路径下的函数库创建soname库,并把soname库及其指向信息写入文件/etc/ld.so.cache。


ldconfig -n 路径名:为指定路径下的函数库创建soname库,但不放入ld.so.cache文件。


文件:


/etc/ld.so.conf:存放ldconfig运行时搜索的路径。


/etc/ld.so.cache:存放ldconfig搜索到的库和soname。


2.用gcc编译连接


gcc有预处理,编译,汇编,连接等阶段,可以在任一个阶段停下。可生成对象文件,函数库,可执行文件等。


gcc -Wall -g -c file.c:为c语言源文件生成对象文件file.o,不连接。


ar demo_static.so file1.o file2.o:生成静态函数库。


gcc -fPIC -Wall -g -c file.c:为c语言原文件生成可用于共享函数库的对象文件file.o,不连接。


gcc -shared -Wl,-soname,library.so.n -g -o library.so.n.m file.o -lc:用libc.so库,file.o生成共享函数库library.so.n.m及其soname库library.so.n。


gcc -g -o demo_dynamic demo_dynamic.c -ldl:用libdl.so库,demo_dynamic.c成可执行文件demo_dynamic,用到库libdl.so表示可执行文件运行期间动态调用函数库的代码可执行。即demo_dynamic.c中如果有用到dlopen(),dlsym(),dlerror(),dlclose()等动态调用函数库函数可行。


3.查看ELF文件依赖的库


ldd不要对不信任的ELF文件用,因为它隐含了对某些环境变量的改变。


ldd demo_use:查看可执行文件demo_use依赖的库。


ldd libhello.so:查看库libhello.so依赖的库。


4.查看ELF文件的符号信息,


查找某个符号(变量或函数)在哪个库里


nm demo_use:查看可执行文件demo_use所有符号信息。


nm libhello.so:查看库libhello.so所有符号信息。


nm -o /lib/* /usr/lib/* 2> /dev/null | grep "function":在目录/lib,/usr/lib下查找包含了function的文件。


nm -o ./*.so* | grep 'hello':在当前目录的*.so*文件中查找包含了hello的文件。


5.系统的函数库


ld-linux.so:载入ELF文件用。可执行文件启动,启动时载入共享函数库都要用到这个库。


libc.so:c语言支持库。


libdl.so:动态连接库用。


6.环境变量


调试用


LD_LIBRARY_PATH:启动时连接共享函数库,执行时打开动态函数库首先搜索的路径。


LD_DEBUG:显示运行时的信息,如符号寻找和绑定,重定向,执行等等。


】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇Linux C调用C 库(用C封装C 接口) 下一篇Program library 使用Linux共享函..

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容:

·常用meta整理 | 菜鸟 (2025-12-25 01:21:52)
·SQL HAVING 子句:深 (2025-12-25 01:21:47)
·SQL CREATE INDEX 语 (2025-12-25 01:21:45)
·Shell 传递参数 (2025-12-25 00:50:45)
·Linux echo 命令 - (2025-12-25 00:50:43)