一、创建共享库:
1.写源程序 xxx1.c xxx2.c.../*.c(通配符方式)
2.编译源程序,加-fpic生成.o文件
gcc -c -fpic xxx1.c xxx2.c.../*.c(通配符方式)
3.生成共享库文件
gcc -shared xxx.o -o libxxx.so
4.提供头文件,方便调用

二、使用共享库
1.写调用源程序 xxx.c
2.编译源程序,生成.o文件
3.链接共享库文件
gcc test.o -l xxx(共享库去掉lib前缀和.a后缀剩下的名字) -L . ----------{PATH}
如果操作系统支持环境变量LIBRARY_PATH,使用该环境变量可以省略-L
4.执行
执行期间,动态加载共享库,系统会自动查找LD_LIBRARY_PATH环境变量中的路径,确定共享库的位置,如果找不到
共享库文件,程序会执行失败。(静态库不需要)

三、显式加载和使用共享库
#include<dlfcn.h>
void *dlopen(const char *filename,int flag);
//filename:so文件名
//flag:打开方式
//返回值:void *,表示打开后的共享库文件指针
char *dlerror(void);
//检查dlopen打开共享库是否成功
//返回空指针表示打开成功
//返回非空字符串表示打开失败,字符串内容包含失败原因
void *dlsym(void *hanlde,const char *symbol);
//使用dlsym获取打开后的共享库中的函数
//hanlde,需要使用的共享库地址,dlopen的返回值
//symbol,需要调用的函数名
//返回值:void *,使用时需要自行转换为对应函数类型
int dlclose(void *handle);
//关闭共享库,释放内存
其中dlopen的参数flag的含义如下:
RTLD_LAZY:符号查找时候才加载。(使用时加载到内存)
RTLD_NOW:马上加载。(打开即加载到内存)

unix/linux共享库(动态库)简介的更多相关文章

  1. Linux系统中“动态库”和“静态库”那点事儿 /etc/ld.so.conf 动态库的后缀为*.so 静态库的后缀为 libxxx.a ldconfig 目录名

    Linux系统中“动态库”和“静态库”那点事儿 /etc/ld.so.conf  动态库的后缀为*.so  静态库的后缀为 libxxx.a   ldconfig   目录名 转载自:http://b ...

  2. Linux系统中“动态库”和“静态库”那点事儿【转】

    转自:http://blog.chinaunix.net/uid-23069658-id-3142046.html 今天我们主要来说说Linux系统下基于动态库(.so)和静态(.a)的程序那些猫腻. ...

  3. linux静态与动态库创建及使用实例

    一,gcc基础语法: 基本语法结构:(由以下四部分组成) gcc -o 可执行文件名 依赖文件集(*.c/*.o) 依赖库文件及其头文件集(由-I或-L与-l指明) gcc 依赖文件集(*.c/*.o ...

  4. Linux系统中“动态库”和“静态库”那点事儿

    摘自http://blog.chinaunix.net/uid-23069658-id-3142046.html 今天我们主要来说说Linux系统下基于动态库(.so)和静态(.a)的程序那些猫腻.在 ...

  5. Linux中的动态库和静态库(.a/.la/.so/.o)

    Linux中的动态库和静态库(.a/.la/.so/.o) Linux中的动态库和静态库(.a/.la/.so/.o) C/C++程序编译的过程 .o文件(目标文件) 创建atoi.o 使用atoi. ...

  6. 【转】分析Linux和windows动态库

    原文地址:http://www.cnblogs.com/chio/archive/2008/11/13/1333119.html 摘要:动态链接库技术实现和设计程序常用的技术,在Windows和Lin ...

  7. Linux和windows动态库

    转载:http://www.cnblogs.com/chio/archive/2008/11/13/1333119.html 态链接库技术实现和设计程序常用的技术,在Windows和Linux系 统中 ...

  8. Linux 静态库&动态库调用

    1.什么是库在windows平台和linux平台下都大量存在着库.本质上来说库是一种可执行代码的二进制形式,可以被操作系统载入内存执行.由于windows和linux的本质不同,因此二者库的二进制是不 ...

  9. linux和windows动态库加载路径区别

    # linux和windows动态库加载路径区别 ### 简介------------------------------ linux加载动态库的路径是系统目录/lib和/usr/lib.- wind ...

  10. Linux中创建和使用静态库&动态库

    库本质上来说库是一种可执行代码的二进制形式,可以被操作系统载入内存执行 Linux下库的种类 linux下的库有两种:静态库和共享库(动态库). 二者的不同点在于代码被载入的时刻不同. 静态库的代码在 ...

随机推荐

  1. Java日志体系(四)slf4j

    1.1 简介 与commons-logging相同,slf4j也是一个通用的日志接口,在程序中与其他日志框架结合使用,并对外提供服务. Simple Logging Facade for Java简称 ...

  2. Go项目实战:打造高并发日志采集系统(一)

    项目结构 本系列文章意在记录如何搭建一个高可用的日志采集系统,实际项目中会有多个日志文件分布在服务器各个文件夹,这些日志记录了不同的功能.随着业务的增多,日志文件也再增多,企业中常常需要实现一个独立的 ...

  3. CentOS8 安装 simple-scan 的方法

    CentOS8删除了很多软件包,解决的思路一般是从CentOS7或EPEL7的软件仓库中寻找,并解决依赖关系. 比如找到EPEL7中有 simple-scan 软件包,但安装时发现其又依赖 gnome ...

  4. 【笔记】Docker部署Odoo

    一,制作一个自己的odoo镜像odoo:yto 1,下载一个odoo10的镜像 docker pull odoo:10.0 2,按照自己的意愿修改里面的内容 docker run -it -u roo ...

  5. 打开svn时出现 R6034

    An application has made an attempt to load the C runtime library...... 最后发现是因为环境变量path里面有:E:\anacond ...

  6. Chrome F12 谷歌开发者工具解析

    一.工具简单介绍 F12可用于网站界面.性能测试,bug定位等 以 www.baidu.com 为例: Elements:查看页面元素属性(多用于自动化元素定位) Console:记录日志信息(用于定 ...

  7. 【ARM-Linux开发】linux下Eclipse进行C编程时动态链接库的生成和使用

    linux下Eclipse进行C编程时动态链接库的生成和使用 引用 http://linux.chinaitlab.com/soft/864157.html 欢迎进入Linux社区论坛,与200万技术 ...

  8. git pull因为主线分支问题解决

    方法1:如果你想保留刚才本地修改的代码,并把git服务器上的代码pull到本地(本地刚才修改的代码将会被暂时封存起来) git stashgit pull origin mastergit stash ...

  9. Compress and decompress string

    You are given a string with lower case letters only. Compress it by putting the count of the letter ...

  10. MySQL慢查询—开启慢查询

    ###一.简介 开启慢查询日志,可以让MySQL记录下查询超过指定时间的语句,通过定位分析性能的瓶颈,才能更好的优化数据库系统的性能. ###二.参数说明 slow_query_log 慢查询开启状态 ...