【 声明:版权所有,欢迎转载,请勿用于商业用途。  联系信箱:feixiaoxing @163.com】

动态链接库不是linux独有的特性,在windows下面也存在这样的特性。一般来说,windows下面的动态连接库是以*.dll作为结尾的,而linux下面的动态连接库是以*.so结尾的。和静态链接库相比,动态连接库可以共享内存资源,这样可以减少内存消耗。另外,动态连接是需要经过操作系统加载器的帮助才能被普通执行文件发现的,所以动态连接库可以减少链接的次数。有了这个特点,我们就不难发现为什么很多软件的补丁其实都是以动态库发布的。

那么,在Linux上动态库是怎么生成的呢?

#include "test.h"int add(int a, int b)
{return a + b;
}

头文件格式,

#ifndef  _TEST_H
#define  _TEST_Hint add(int a, int b);
#endif

此时如果我们想要生成动态库,要做的工作其实非常简单,输入gcc -shared -fPIC -o libtest.so test.c即可。回车后输入ls,我们就可以发现当前目录下面出现了libtest.so文件。

#include <stdio.h>
#include "test.h"int main()
{printf("%d\n", add(2, 3));return 1;
}

在上面的代码当中,我们发现使用到了add函数,那么此时如何才能生成一个执行文件呢?也很简单,输入gcc hello.c -o  hello ./libtest.so。然后输入./hello,此时可以验证一下执行文件运行是否正确。在编写静态库的时候,我说过静态库是汇编链接到执行文件当中的,而动态库不会。朋友们可以做个小实验,删除libtest.so,然后输入./hello。此时大家可以看看系统有没有错误返回?
    这个时候,有的朋友就会问了,那在windows下面dll应该怎么编写呢?其实也不难,只要在test.h上面稍作改变即可。其他的步骤和 静态库的操作是基本类似的。

#ifndef  _TEST_H
#define _TEST_H#ifdef USR_DLL
#define DLL_API _declspec(dllexport)
#else
#define DLL_API _declspec(dllimport)
#endifDLL_API int add(int a, int b);#endif

linux下的C语言开发(动态库)相关推荐

  1. linux下的C语言开发

    在很多人的眼里,C语言和linux常常是分不开的.这其中的原因很多,其中最重要的一部分我认为是linux本身就是C语言的杰出作品.当然,linux操作系统本身对C语言的支持也是相当到位的.作为一个真正 ...

  2. 第4章 Linux下的C语言开发基础

    第4章 Linux下的C语言开发基础 4.1 C语言开发的基本步骤 C语言源程序开发的基本步骤如下: 根据项目需求划分功能模块 编辑.利用文本编辑器vi或gedit编写C源程序并保存,文件的后缀为.c ...

  3. linux系统最好的c类语言开发软件,Linux下基于C 语言开发即时通信软件.doc

    Linux下基于C 语言开发即时通信软件 Linux下基于C++语言开发即时通信软件 关键词:聊天软件 文字聊天 Linux平台 C/S架构ICE中间件 Linux-based instant mes ...

  4. linux下的C语言开发(静态库)

    [ 声明:版权所有,欢迎转载,请勿用于商业用途.  联系信箱:feixiaoxing @163.com] 在我们编写软件的过程当中,少不了需要使用别人的库函数.因为大家知道,软件是一个协作的工程.作为 ...

  5. swift 在linux系统,Linux下搭建Swift语言开发学习环境

    介绍在Ubuntu平台搭建Swift开发环境: 介绍Swift脚本解析器swift的使用: 介绍swift编译器swiftc的使用: 1.序言 周三12月4日凌晨1点多看到苹果正式开源了Swift,国 ...

  6. linux下做c语言开发

    在开始之前,首先要说明的是,linux开发程序最主要的编辑器是vi/vim编辑器,当然还有emacs,gedit,只是vi/vim的用户实在是压倒性的多数,原因就是,它在编辑效率上的战胜了其他对手.v ...

  7. 开始在linux下做c语言开发

     本篇文章旨在介绍如何开始在linux下面进行C语言程序设计,以及如何使用程序设计及调试工具进行编写C程序.学会使用gcc及gdb等工具进行linux下的c编写和调试. 在开始之前,首先要说明的是 ...

  8. linux下的C语言开发 GDB的例子

    在很多人的眼里,C语言和linux常常是分不开的.这其中的原因很多,其中最重要的一部分我认为是linux本身就是C语言的杰出作品.当然,linux操作系统本身对C语言的支持也是相当到位的.作为一个真正 ...

  9. Linux下CMake简明教程(六)动态库和静态库的编译控制

    代码在git 有时只需要编译出动态库和静态库,然后等着让其它程序去使用.让我们看下这种情况该如何使用cmake.首先按照如下重新组织文件,只留下testFunc.h和TestFunc.c ├── CM ...

最新文章

  1. 2.3 使用 dom4j 对 xml文件进行 dom 解析
  2. matlab编程小结
  3. spring data jpa实现分页查询功能
  4. 阿里云 mysql 超时_mysql数据库超时
  5. vue-cli项目模板的一些思考
  6. Python学习-将list列表写入文件并读取方法汇总
  7. php提交失败阻止提交数据,php – 在刷新浏览器时阻止重新提交提交
  8. 苹果无人车裁员200人,收购特斯拉呼声再起
  9. 通过import keyword查看python中定义的关键字
  10. UGUI世界坐标转换为UI本地坐标(游戏Hud的实现)
  11. 微星小飞机界面翻译_/|黑科技高效快捷的多引擎翻译软件
  12. 防火墙阻止软件联网方法
  13. 我和电赛的成长故事与总结#2019年全国大学生电子设计竞赛#
  14. 遗传算法入门(连载之十) 神经网络入门(连载预告)
  15. 创蓝253云通讯 paas 短信发送接口和定义说明
  16. 利用Kmeans聚类进行用户分层分析
  17. SpellBERT:预训练模型与中文拼写纠错
  18. 电脑蓝屏造成的数据丢失如何恢复
  19. 最近在关注冰岩作坊自己写的一个ftp的搜索
  20. 谁引爆了手机里的电池?

热门文章

  1. 后台取值页面显示——Vue.js
  2. Sql Server 列转行 Pivot使用
  3. MyBatis Criteria使用 OffsetLimitInterceptor.java分页报错
  4. Centos5上部署udev
  5. ajax,training my javascript!手写AJAX,用POST方法传值
  6. Non-standard serial port baud rate setting
  7. 转js 将json字符串转换为json对象的方法解析
  8. HTTP协议扫盲(一)HTTP协议的基本概念和通讯原理
  9. AgileEAS.NET SOA 中间件平台.Net Socket通信框架-简单例子-实现简单的服务端客户端消息应答...
  10. 结构体与共用体07 - 零基础入门学习C语言59