一、创建共享库:
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. 简单wait(),notify()方法

    1.两个类public class Name{ public static void main(String[] args) throws InterruptedException { User us ...

  2. [ES6 系列] 你真的了解ES6吗(一)

    前言 无论是我们日常开发还是面试跳坑, ES6 已经变得越来越重要,那么你是否对它足够熟悉呢 ES6 将会是专栏接下来的一个系列,从最基础的概念或者有趣的问题开始逐渐深入,探究 ES6 常用的特性以及 ...

  3. Python3 Selenium自动化web测试 ==> 第九节 WebDriver高级应用 -- 操作select 和 alert

    学习目的: 掌握页面常规元素的定位方法 场景: 网页正常的select元素下拉框常规方法和select专属方法 正式步骤: step1:常规思路select页面元素定位 处理HTML代码截图 # -* ...

  4. 【图像处理】DVR H.264视频编码基本知识

    视频编码技术基本是由ISO/IEC制定的MPEG-x和ITU-T制定的H.26x两大系列视频编码国际标准的推出.从H.261视频编码建议,到 H.262/3.MPEG-1/2/4等都有一个共同的不断追 ...

  5. 深入理解C语言-结构体做函数参数

    结构体做函数参数,在C语言中属于常见现象,此时为了内存考虑,不传递结构体,而是传递结构体的地址 结构体定义 struct Man { char name[64]; int age; }; 结构体可以与 ...

  6. Vue.js 使用 $refs 定位 DOM 出现 undefined

    找到这篇文章,写得不错,记录一下.https://www.jianshu.com/p/090937a480b5

  7. sass与less对比学习

    参考链接:https://blog.csdn.net/luluan_lin/article/details/83749176

  8. VIM 介绍

    gedit  a.txt  是一个图形界面的文本编辑器.  需要安装图形界面才会有. nano a.txt  也是一样的 vi  是一种文本界面的编辑器. vim  是 vimsual interfa ...

  9. c++ erase 中的坑

    先看一段正常的代码 #include <iostream> #include <string> using namespace std; int main() { " ...

  10. iterm2 vim 开启滚轮

    之前使用mac自带终端时,可以通过上下滑动触摸板来在vim中快速浏览上下文.最近听说iterm2功能更加强大,索性试一试.发现默认没有这个功能,感觉应该可以通过配置实现,于是在iterm2的prefe ...