linux & windows下的动态库制作
来源:互联网 发布:指南针软件好用吗 编辑:程序博客网 时间:2024/05/16 06:23
https://www.cnblogs.com/chengliangsheng/p/3602274.html
动态链接库不是linux独有的特性,在windows下面也存在这样的特性。一般来说,windows下面的动态连接库是以*.dll作为结尾的,而linux下面的动态连接库是以*.so结尾的。和静态链接库相比,动态连接库可以共享内存资源,这样可以减少内存消耗。另外,动态连接是需要经过操作系统加载器的帮助才能被普通执行文件发现的,所以动态连接库可以减少链接的次数。有了这个特点,我们就不难发现为什么很多软件的补丁其实都是以动态库发布的。
那么,在Linux上动态库是怎么生成的呢?
#include "test.h" int add(int a, int b) { return a + b; }
头文件格式,
#ifndef _TEST_H #define _TEST_H int 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 0 ;}
在上面的代码当中,我们发现使用到了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) #endif DLL_API int add(int a, int b); #endif
- linux & windows下的动态库制作
- linux下 动态链接库的制作
- linux下动态库的制作
- Windows下静态库和动态库的制作
- Linux下的动态库与静态库的制作
- linux下制作静态库和动态库的方法
- linux下制作静态库和动态库的方法
- linux下制作静态库和动态库的方法
- Linux下静态库,动态库的制作和使用
- 在linux下如何制作自己的动态连接库
- linux 下动态链接库的制作与使用
- linux 下动态链接库的制作与使用
- linux 下动态链接库的制作与使用
- Linux下动态链接库的制作与使用
- linux 下动态链接库的制作与使用
- linux下制作一个动态库
- Windows下 如何制作动态库和静态库
- Windows和Linux下动态库的创建和使用
- python连接mysql数据库
- HttpServletResponse
- 用最少的字介绍最常用的机器学习分类算法
- 哈尔滨理工大学第七届程序设计竞赛初赛(高年级组)F 苦逼的单身狗【DP】
- Spring深入浅出IOC详解
- linux & windows下的动态库制作
- 258. Add Digits
- 用.Net Core控制台模拟一个ASP.Net Core的管道模型
- 设计模式:可复用面向对象软件的基础---学习(0)
- 这几天的辛苦和努力
- 【java基础:JDBC】基于DBUtils工具类查询数据库的8种方式!非常重要!
- Building the kernel with clang
- Golang 实现WebSocket服务端,客户端和html5调用
- Spring深入浅出概述