linux系统下的应用编程需要系统提供的库文件,包括静态库或动态库。不管是静态库还是动态库,都是编译好的二进制文件。在我们编译程序时要链接的目标文件,静态库是链接的时候直接编译到程序里,和程序成为一体,因此程序代码的体积较大,而动态库链接之后,库文件和程序不为一体,只有在代码运行时才会找相应的库文件进行链接,故而代码体积小,运行速度更快。

  接下来我就将linux系统下的静态库和动态库的制作过程,做个简单的介绍。

  一、静态库的制作

  1.如下图所示,编写示例工程代码dayin.c 、dayin.h、test.c

其中dayin.c文件为要封装的静态库源码,dayin.h文件存放功能函数的申明,test.c是要验证静态库功能的源码文件

  2.编译功能源码文件,生成dayin.o目标文件:gcc -c dayin.c    

  3.执行命令生成静态库文件:ar crs libdayin.a dayin.o

  4.编译生成测试程序test:gcc -o test test.c -L. -ldayin  (-L.为指定静态库的路径,.为当前目录下)

  5.删除静态库文件之后,能够再此正常运行

  二、动态库制作过程

  1.编写制作动态库的示例工程代码shuru.c shuchu.c head.h main.c

  

  2.编译功能模块shuru.c和shuchu.c生成与路径无关的目标文件:gcc -c -fPIC shuru.c shuchu.c

  3.生成动态库文件:gcc -shared -o libdongtai.so.1 shuru.o shuchu.o

  4.创建动态库的软连接:ln -s libdongtai.so.1 libdongtai.so

  5.编译测试程序:gcc -o main main.c -L. -ldongtai

  6.运行可执行性文件时,会报错误,因为没有添加环境变量,下面有三种解决方案。

  错误信息:./main: error while loading shared libraries: libdongtai.so: cannot open shared object file: No such file or directory

  1)添加临时的环境变量,只在当前终端有效:export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:.

  2)把生成的动态库文件和软连接拷贝到/usr/lib下或/lib下,不过一般不建议这种操作,因为两个目录下一般为系统的库文件所在的路径。

  3)添加配置文件:在/etc/ld.so.conf.d/下添加my.conf文件,加入库所在的路径:/home/lolors/test/library1/

    添加完毕后,刷新:ldconfig即可。

linux系统环境下的静态库和动态库的制作的更多相关文章

  1. 解决Linux系统下程序找不到动态库的方法

    思路:一般来说,通过make命令已经将程序依赖的动态库编译出来了,通过make install命令已经将动态库安装到系统的某个路径下.找没找到动态库就看这个路径是否包含在系统默认搜索动态库的路径中,如 ...

  2. Linux下Gcc生成和使用静态库和动态库详解(转)

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

  3. 在Linux下如何使用GCC编译程序、简单生成 静态库及动态库

      最近在编写的一个Apache  kafka 的C/C++客户端,,在看他写的 example中,他的编译是用librdkafka++.a和librdkafka.a    静态库编译的,,,而我们这 ...

  4. Linux下Gcc生成和使用静态库和动态库详解

    参考文章:http://blog.chinaunix.net/uid-23592843-id-223539.html 一.基本概念 1.1什么是库 在windows平台和linux平台下都大量存在着库 ...

  5. [转]Linux下用gcc/g++生成静态库和动态库(Z)

    Linux下用gcc/g++生成静态库和动态库(Z) 2012-07-24 16:45:10|  分类: linux |  标签:链接库  linux  g++  gcc  |举报|字号 订阅     ...

  6. linux下的共享库(动态库)和静态库

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

  7. 【转】Linux下gcc生成和使用静态库和动态库详解

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

  8. (笔记)Linux下的静态库和动态库使用详解

    库从本质上来说是一种可执行代码的二进制格式,可以被载入内存中执行.库分静态库和动态库两种. 一.静态库和动态库的区别 1. 静态函数库 这类库的名字一般是libxxx.a:利用静态函数库编译成的文件比 ...

  9. Linux下GCC生成和使用静态库和动态库【转】

    本文转载自:http://www.cppblog.com/deane/articles/165216.html 一.基本概念 1.1什么是库 在windows平台和linux平台下都大量存在着库. 本 ...

随机推荐

  1. Android 单元测试Junit

  2. [PE格式分析] 4.IMAGE_FILE_HEADER

    源代码如下: typedef struct _IMAGE_FILE_HEADER { +04h WORD Machine; // 运行平台 +06h WORD NumberOfSections; // ...

  3. Linux 虚拟机虚拟网卡问题导致无法连接问题

    问题描述 当 Linux 虚拟机启动时,通过串口输出或者启动日志, 观察到虚拟网卡启动或者初始化故障, 导致虚拟机无法连接. 问题分析 常见的超时报错范例如下: CentOS 复制 Bringing ...

  4. STL算法分类记忆

    STL算法主要是我们强大的标准库中以迭代器或数值或函数对象为参数预先定义好的一系列算法操作. 在STL算法分类中首先要提的就是两个普遍存在的后缀: _if _copy 其中这两个后缀的作用分别是:一. ...

  5. Vim快捷输出查找寄存器的内容(去除\<,\>和\V)

    Vim自带的*搜索会自动在单词两头加上\<和\>,使用第三方的vnoremap *,则是加上前缀\V, 当我们想要输出刚刚搜索的内容时可用<C-r>/,但是很可能会带上多余的符 ...

  6. Task执行内幕与结果处理解密

    本课主题 Task执行内幕与结果处理解密 引言 这一章我们主要关心的是 Task 是怎样被计算的以及结果是怎么被处理的 了解 Task 是怎样被计算的以及结果是怎么被处理的 Task 执行原理流程图 ...

  7. [EffectiveC++]item36:绝不重新定义继承而来的non-virtual函数

  8. 配置管理SVN软件具体操作

    配置管理(SVN) CM:configuration management  配置管理人员 什么是SVN SVN --Subversion --是一个开放源代码的版本控制系统 --时下流行的有SVN和 ...

  9. 移动端 html基值(转载)

    (function () { document.addEventListener('DOMContentLoaded', function () { var html = document.docum ...

  10. 用sql语句实现年龄分段统计

    SELECT CASE WHEN (age >= 10 AND age <= 20) THEN '10-20' WHEN (age >= 21 AND age <= 30) T ...