Linux之动态库
命令规则
lib + 名字 + .so
制作步骤
1)生成与位置无关的代码(生成与位置无关的代码)
2)将.o打包成共享库(动态库)
发布和使用共享库
动态库运行原理:

生成动态库:
gcc -fPIC -c *.c -I ./include

打包动态库并移动

使用动态库:
/***
main.c
***/ #include<stdio.h>
#include"MyCalc.h" int main()
{
int a = ;
int b = ;
int result = a + b;
printf("a + b = %d\n",result);
return ;
}
ubuntu1604@ubuntu:~/wangqinghe/C/sharelib$ gedit main.c
ubuntu1604@ubuntu:~/wangqinghe/C/sharelib$ gcc main.c -Iinclude -L ./lib/ -lMyCalc -o myapp
ubuntu1604@ubuntu:~/wangqinghe/C/sharelib$ ls
app include lib main.c myapp src
ubuntu1604@ubuntu:~/wangqinghe/C/sharelib$ ./myapp
a + b = 30
ldd 命令:查看程序执行时依赖的所有的库
ubuntu1604@ubuntu:~/wangqinghe/C/sharelib$ ldd myapp
linux-vdso.so.1 => (0x00007fffe8d13000)
libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f92ffac7000)
/lib64/ld-linux-x86-64.so.2 (0x00007f92ffe91000)
设置动态库环境变量(临时)
export LD_LIBRARY_PATH=./lib
永久生效:
bansh.rc
将export LD_LIBRARY_PATH=./lib(绝对路径)
解决动态库无法加载
- 需要找到动态链接器的配置文件
- 动态库的路径写到配置文件中
- 更新 sudo idconfig -v
cd etc
ls -l ld.so.conf
vi ld.so.conf
(o 在当前行下行创建一行)
将动态库路径写到该配置文件中(绝对路径)
sudo idconfig -v

动态库的优点:
- 执行程序体积小
- 动态库更新方便(接口没变)
缺点:
- 发布程序时,需要将动态库发布给用户
- 加载速度较静态库较慢
Linux之动态库的更多相关文章
- 谈谈Linux下动态库查找路径的问题 ldconfig LD_LIBRARY_PATH PKG_CONFIG_PATH
谈谈Linux下动态库查找路径的问题 ldconfig LD_LIBRARY_PATH PKG_CONFIG_PATH 转载自:http://blog.chinaunix.net/xmlrpc.ph ...
- Linux下动态库生成和使用
Linux下动态库生成和使用 一.动态库的基本概念 1.动态链接库是程序运行时加载的库,当动态链接库正确安装后,所有的程序都可以使用动态库来运行程序.动态链接库是目标文件的集合,目标文件在动态链接库中 ...
- Linux生成动态库系统
Linux生成动态库系统 一个.说明 Linux下动态库文件的扩展名为 ".so"(Shared Object). 依照约定,全部动态库文件名称的形式是libname.so(可能在 ...
- DELPHI开发LINUX的动态库
DELPHI开发LINUX的动态库 WINDOWS的动态库是.dll,这个大家都知道. LINUX也有动态库,扩展名是.so,现在DELPHI也能开发LINUX的动态库哦. DELPHI对LINUX的 ...
- 深入理解LINUX下动态库链接器/加载器ld-linux.so.2
[ld-linux-x86-64.so.2] 最近在Linux 环境下开发,搞了好几天 Compiler 和 linker,觉得有必要来写一篇关于Linux环境下 ld.so的文章了,google上搜 ...
- Linux下动态库查找路径的问题
说到和动态库查找路径相关的问题,总体上可以分为两类: 第一类: 通过源代码编译程序时出现的找不到某个依赖包的问题,而如果此时你恰好已经按照它的要求确确实实.千真万确.天地良心地把依赖库给装好了, ...
- 【linux】linux下动态库so文件的一些认识
来源:http://mypyg.iteye.com/blog/845915 so其实就是shared object的意思.今天看了上面的博客,感觉好吃力.赶紧做个笔记记录一下.下面的内容大多都是连接中 ...
- LINUX下动态库及版本号控制
针对同一动态组件的不同版本链接和加载. 一.概念 DLL HELL字面意思是DLL"灾难",是由于com组件(动态库)升级引起的程序不能运行的情况 ...
- 谈谈Linux下动态库查找路径的问题
学习到了一个阶段之后,就需要不断的总结.沉淀.清零,然后才能继续"上路".回想起自己当年刚接触Linux时,不管是用源码包编译程序,还是程序运行时出现的和动态库的各种恩恩怨怨,心里 ...
- linux下动态库so文件的一些认识
转自:http://mypyg.iteye.com/blog/845915 个人创作,欢迎指错. 牵扯到ELF格式,gcc编译选项待补,简单实用的说明一下,对Linux下的so文件有个实际性的认识. ...
随机推荐
- 【第一季】CH04_FPGA设计Verilog基础(一)Enter a post title
[第一季]CH04_FPGA设计Verilog基础(一) 4.1 Verilog HDL 代码规范 u 项目构架设计 项目的构架用于团队的沟通,以及项目设计的全局把控 u 接口时序设计规范 模块和模块 ...
- 【广搜】Keyboarding
题目描述 给定一个r行c列的在电视上的“虚拟键盘”,通过“上,下,左,右,选择”共5个控制键,你可以移动电视屏幕上的光标来打印文本.一开始,光标在键盘的左上角,每次按方向键,光标总是跳到下一个在该方向 ...
- ACM-ICPC 2017北京
J. Pangu and Stones 大意: 给定$n$堆石子, $(n\le 100)$, 每次操作任选连续的至少$L$堆至多$R$堆合并, 代价为合并石子的总数, 求合并为$1$堆的最少花费. ...
- 怎样获取从服务器返回的xml或html文档对象
使用 xhr.responseXML; 通过这个属性正常获取XML或HTML文档对象有两个前置条件: 1. Content-Type头信息的值等于: text/xml 或 application/x ...
- SimpleDateFormat线程安全问题
今天线上出现了问题,从第三方获取的日期为 2019-12-12 11:11:11,通过SimpleDateFormat转换格式后,竟然出现完全不正常的日期数据,经百度,得知SimpleDateForm ...
- 记录RabbitMQ
第一步:建立Erlang环境 >>https://www.erlang.org/downloads 下载并安装.一路Next即可. 默认安装目录: C:\Program Files\erl ...
- Linux下定时任务的查看及取消
crontab -l 表示列出所有的定时任务 crontab -r 表示删除用户的定时任务,当执行此命令后,所有用户下面的定时任务会被删除,执行crontab -l后会提示用户:“no crontab ...
- 2018 年 IoT 那些事儿
本文作者:murphyzhang.xmy.fen @腾讯安全云鼎实验室 2018年,是 IoT 高速发展的一年,从空调到电灯,从打印机到智能电视,从路由器到监控摄像头统统都开始上网.随着5G网络的 ...
- 如何对Linux内核参数进行优化?
打开配置文件 vi /etc/sysctl.conf 输入配置,如下是内核优化的参数 # TCP三次握手建立阶段接收SYN请求队列的最大长度,默认为1024(将其设置得大一些可以使出现Nginx繁忙来 ...
- AS中Git操作和Git工作流
查阅并学习安卓中如何使用Git,并扩展学了下Gitflow工作流程,以下是我觉得有用,系统,详细的相关文章. AS中Git操作系列 https://www.jianshu.com/p/0cc226ee ...