Head First C 第八章 静态库与动态库 创建动态库
2019独角兽企业重金招聘Python工程师标准>>>
Head First C 第八章 静态库与动态库 创建动态库
动态库是什么
静态库文件,需要在链接过程中和主程序链接在一起,如果你想改变某个部分的功能,或者发布不同版本,就需要修改这个代码并全部重新编译,需要做很多的重复操作,因此引入动态库的概念,动态库不需要在编译时链接,更容易改变。
动态库的创建
和静态库一样,创建静态库需要.o文件
- 创建.o文件
gcc -I./includes -fPIC -c hfcal.c -o hfcal.o
-fPIC表示创建位置无关代码,现在大部分的操作系统都不需要输入这一命令。 -I指定头文件位置 -c表示只编译,-o表示目标文件路径和名称
位置无关代码,就是无论计算机把它加载到存储器的哪个位置,都可以运行的代码。
- 创建动态库 Linux下:
gcc -shared hfcal.o -o ./libs/libhfcal.so
Mac OS X下:gcc -shared hfcal.o -o ./libs/libhfcal.dylib
在Linux和Unix上,动态库被叫做共享目标文件,在Mac OS X上,叫做动态库,在Windows上叫作动态链接库。 静态库使用ar命令生成的,而动态库要用gcc。
如何使用动态库
- 我们有了主程序代码的目标文件(.o),我们可以使用和静态库一样的方式来编译主程序。
gcc elliptical.o -I./includes -L./libs -lhfcal -o elliptical
虽然命令一样,但是gcc做的事却不尽相同,使用静态库时,gcc会把静态库和主程序目标文件统统缝合在一起,但是使用动态库时,gcc只会在目标可执行文件中插入一段用来查找库位置的占位符,在运行时去链接。 这么看起来动态链接库这个名字取得棒极了。 - 不同系统下动态库的使用 在Mac OS X 下,编译程序时,会把动态库的路径保存在可执行文件中,程序运行时知道从哪里去找这个动态库。 在Windows中,会现在当前目录下查找,如果没找到,就会去找保存在PATH中的目录。 但在Linux和大部分Unix中不一样,系统只会从环境变量LD_LIBRARY_PATH中查找动态库,我们有两种方法可以解决这个问题:
- 把我们的动态库拷贝到系统动态库目录下usr/local/lib
- 在LD_LIBRARY_PATH中添加我们的当前目录
修改程序的动态库
当我们的程序应用于不同场景,有一个动态库中的功能不再适用了,我们要做的就是,修改这一个动态库,与其他文件无关。
代码
dynamic library sample
转载于:https://my.oschina.net/alextuan/blog/651811
Head First C 第八章 静态库与动态库 创建动态库相关推荐
- R语言gganimate包创建可视化gif动图、可视化动图:ggplot2可视化静态散点图、gganimate包创建动态散点分面图(facet_wrap)动画基于transition_time函数
R语言gganimate包创建可视化gif动图.可视化动图:ggplot2可视化静态散点图.gganimate包创建动态散点分面图(facet_wrap)动画基于transition_time函数 目 ...
- 基于SCL语言的模拟量平均值滤波FB库功能介绍及创建FB库的具体方法
基于SCL语言的模拟量平均值滤波FB库功能介绍及创建FB库的具体方法 FB库功能说明: 可对模拟量进行平均值滤波处理,某些从现场采集的模拟量信号在传输过程中易出现干扰,可能导致数据失真,使用该FB库可 ...
- Linux 共享库简介(怎样创建共享库)
前言 0x1 什么是共享库 0x2 共享库在文件系统中的位置 0x3 使用 ldconfig 命令 0x4 使用非标准库位置 0x5 示例(如何创建一个共享库) 前言 一个库文件由多个不同的目标文件填 ...
- oracle根据生产库建立测试库,如何使用RMAN创建测试库(duplicate)
截图是个体力活,把图片弄到文章里又是一通折腾,俺是坚定地纯文字版! 场景: 2台虚拟机,一台有数据库ORCL,另一台只装了数据库软件 要求: 将ORCL 迁移到另一台上,不允许宕机 约定:采用最简单的 ...
- 【Git】Git 基础命令 ( Git 版本库概念 | 创建版本库 git init | 克隆版本库 git clone )
文章目录 一.Git 版本库概念 二.创建版本库 git init 三.克隆版本库 git clone 一.Git 版本库概念 Git 版本库概念 : Git 版本库 Repository 又称为 G ...
- wordpress 数据库_如何在WordPress中创建视频库(逐步)
wordpress 数据库 Recently, a user asked us how to create a video gallery in WordPress. WordPress makes ...
- 【Android 逆向】Android 进程代码注入原理 ( 注入本质 | 静态注入和动态注入 | 静态注入两种方式 | 修改动态库重打包 | 修改 /data/app/xx/libs 动态库 )
文章目录 一.注入本质 二.静态注入和动态注入 三.静态注入两种方式 ( 修改动态库重打包 | 修改 /data/app/packageName/libs/ 下的动态库 ) 一.注入本质 进程注入本质 ...
- linux系统中 库分为静态库和,Linux系统中“动态库”和“静态库”那点事儿-【经典好文】...
今天我们主要来说说Linux系统下基于动态库(.so)和静态(.a)的程序那些猫腻.在这之前,我们需要了解一下源代码到可执行程序之间到底发生了什么神奇而美妙的事情. 在linux操作系统中,普遍使用E ...
- alsa的动态库安装在哪里_Linux链接库一(动态库,静态库,库放在什么路径下)...
http://www.cppblog.com/wolf/articles/74928.html http://www.cppblog.com/wolf/articles/77828.html http ...
最新文章
- SanDisk闪迪推面向VMware Virtual SAN 6的增强型闪存
- 基于Windows下使用Docker 部署Redis
- hαbits的意思_hαppy什么么意思
- 光流 | 基于Lukas-Kanade光流法的目标跟踪(附C++代码)
- SAP CRM附件上传的一种增强实现
- 2019.02.10 17:49
- 描述C,C++编译和链接过程
- MetadataReader、ClassMetadata、AnnotationMetadata的简单使用
- ListView刷新单条item实现方法
- cityscape讲解
- 青少年软件编程(Python)等级考试试卷一级(判断题)2021-9
- 管理QQ群,什么情况下适合用软件
- 光纤连接器的连接方法
- 哥德巴赫猜想两种题目解法
- Juniper初始化之配置管理接口
- 微信小程序开发实战11_4 微信支付退款流程
- 【C++算法模板】日期类型题目:节假日
- 【2016NOIP普及组】T4:魔法阵 试题解析
- 相等和严格相等(==和===)
- Android adb push后相册没有立马更新,需要刷新media库
热门文章
- python填写excel-使用Python填写Excel文件的简便方法
- python基础菜鸟教程-菜鸟教程学习python
- 使用netron对TensorFlow、Pytorch、Keras、PaddlePaddle、MXNet、Caffe、ONNX、UFF、TNN、ncnn、OpenVINO等模型的可视化
- 网络编程学习笔记(获取所有网络接口)
- LeetCode Sqrt(x)
- Linux命令备忘录: jobs 显示Linux中的任务列表及任务状态命令
- 基于Vue的WebApp项目开发(四)
- JavaEE基础(八)
- VSFTP配置参数详解
- 管道流 pipedinputstream