Linux编程动态库知识

====动态库说明====
1.库名称格式: lib + the_name_of_library + .so + version_number
    exp:libc.so.6
2.ldconfig一般会创建soname,但不创建linker name(libname.so),后者一般安装库时创建
3.暂时添加动态库目录LD_LIBRARY_PATH,一般用于测试和开发
4.LD_PRELOAD预加载库。用于提前加载,紧急用途,或是特殊的测试情况
5.创建动态库
    gcc -fPIC -shared -Wl,-soname, your_soname -o library_name \
    file_list library_list
6.ldconfig加载目录顺序
    按照配置目录的顺序执行
    遇到include ld.so.conf.d/*.conf,这些配置的顺序按照字母升序排列
7.编译程序或是库的时候,.o文件会包含到程序或是库中,动态库不会,如果如果遇到
    未定义的符号,搜索符号是从左往右查找库,直到找到为止,搜索是无状态的,不会
    记录发现了哪些符号,所以一般建议.o放在编译选项的前面,so文件放在后面,按照
    依赖顺序放置:被依赖的对象放在依赖对象右边

时间: 2024-08-09 23:46:00

Linux编程动态库知识的相关文章

linux 生成动态库时提示relocation R_X86_64_32 against `.rodata' can not be used when making a shared object;

linux生成动态库时遇到了relocation R_X86_64_32 against `.rodata' can not be used when making a shared object; recompile with -fPIC错误. 由于我的系统是AMD64位的,所以需要在编译的时候添加 -fPIC选项 解决方法: 例如: g++ -c -fPIC head.cpp    生成head.o g++ -fpic -shared -o libfun.so head.o linux 生成

linux 添加动态库路径

众所周知,Linux动态库的默认搜索路径是/lib和/usr/lib.动态库被创建后,一般都复制到这两个目录中.当程序执行时需要某动态库,并且该 动 态库还未加载到内存中,则系统会自动到这两个默认搜索路径中去查找相应的动态库文件,然后加载该文件到内存中,这样程序就可以使用该动态库中的函数,以及 该动态库的其它资源了.在Linux 中,动态库的搜索路径除了默认的搜索路径外,还可以通过以下三种方法来指定. 方法一:在配置文件/etc/ld.so.conf中指定动态库搜索路径. 可以通过编辑配置文件/

谈谈Linux下动态库查找路径的问题 ldconfig LD_LIBRARY_PATH PKG_CONFIG_PATH

谈谈Linux下动态库查找路径的问题 ldconfig LD_LIBRARY_PATH  PKG_CONFIG_PATH 转载自:http://blog.chinaunix.net/xmlrpc.php?r=blog/article&uid=23069658&id=4028681 学习到了一个阶段之后,就需要不断的总结.沉淀.清零,然后才能继续“上路”.回想起自己当年刚接触Linux时,不管是用源码包编译程序,还是程序运行时出现的和动态库的各种恩恩怨怨,心里那真叫一个难受.那时候脑袋里曾经

linux下动态库的编写和调用

linux下动态库的编写和调用 linux下编写和调用一个简单的动态库大概分为以下几个步骤: - 创建动态库程序文件 add.c int add(int a,int b) { return a+b; } 创建引用头文件 head.c #ifndef _HEAD_ #define _HEAD_ int add(int a,int b); #endif 生成目标文件 生成要加编译器选项 -fpic gcc -fpic -c add.c 然后生成动态库 注意使用链接器选项 -shared gcc -s

Linux下动态库和静态库的编译和链接

1.动态库:Linux中动态库的后缀名为.so 第二步:gcc -shared (C文件名.c) -o (lib动态库名.so) 创建一个.so文件,因为是64位的系统,不兼容,会报错 应该在指令前加-fpic 即gcc -fpic -shared (C文件名.c) -o (lib动态库名.so) 第三步:gcc () -(l库文件名无后缀) -L. -o (编译后的c文件名) -L.告诉系统文件库为当前目录 第四步:进入root模式,export LD_LIBRARY_PATH=.:$LD_L

Linux生成动态库系统

Linux生成动态库系统 一个.说明 Linux下动态库文件的扩展名为 ".so"(Shared Object). 依照约定,全部动态库文件名称的形式是libname.so(可能在名字中增加版本). 这样.线程函数库被称作libthread.so. 静态库的文件名称形式是libname.a.共享archive的文件名称形式是libname.sa.共享archive仅仅是一种过渡形式,帮助人们从静态库转变到动态库. 小编综合自己学习体会以及网络上较好的内容.以简单的样例介绍动态库文件的生

Linux下动态库生成和使用

Linux下动态库生成和使用 一.动态库的基本概念 1.动态链接库是程序运行时加载的库,当动态链接库正确安装后,所有的程序都可以使用动态库来运行程序.动态链接库是目标文件的集合,目标文件在动态链接库中的组织方式是按照特殊方式形成的.库中函数和变量的地址是相对地址,不是绝对地址,其真实地址在调用动态库的程序加载时形成. 2.动态链接库的名称有别名(soname), 真名(realname)和链接名(linker name).别名由一个前缀lib,然后是库的名字,再加上一个后缀“.so”构成.真名是

Linux程序动态库加载优化

作者:zhanhailiang 日期:2014-10-26 linux程序动态库加载流程简介 linux从程序(program或对象)变成进程(process或进程),简单说来需要经过三步: fork进程,在内核创建进程相关内核项,加载进程可执行文件: 查找依赖的.so,逐一加载映射虚拟地址: 初始化程序变量: 如下例通过strace查看pwd命令执行过程: [root@~/wade/codeReview/learningc]# strace pwd execve("/bin/pwd"

DELPHI开发LINUX的动态库

WINDOWS的动态库是.dll,这个大家都知道. LINUX也有动态库,扩展名是.so,现在DELPHI也能开发LINUX的动态库哦. DELPHI对LINUX的开发支持越来越强. 原文地址:https://www.cnblogs.com/hnxxcxg/p/11290661.html