C语言编写静态链接库及其使用
本篇讲述使用C语言编写静态链接库,而且使用C和C++的方式来调用等.
一、静态库程序:执行时不独立存在,链接到可执行文件或者动态库中,目标程序的归档。
1、用C编写静态库步骤
a.建立项目(Win32 Static Library)
b.加入库程序,源文件使用C文件 (Win32 Static Library)
clib.c库源文件
<pre name="code" class="cpp">int CLib_add(int add1,int add2)
{
return add1+add2;
} int CLib_sub(int add1,int add2)
{
return add1-add2;
}
编译,链接后产生clib.lib,后面使用这个文件
2、静态库的使用
a.建立一个C文件,能够在文件里直接使用C库函数,不须要头文件,C编译器仅仅是依据库函数名称,在库中找到相应的函数代码,进行链接。
b.库的路径设置。项目的“Setting”中设置库路径,也能够使用#pragmakeyword设置 #pragma comment(lib,"..\\clib\\clib.lib")
3、C的方式调用C语言编写的静态库
C Type
//C编译器什么头文件及函数声明都不要..... #pragma comment(lib,"..\\clib\\clib.lib") //通知链接器。到那找源码. int main(void)
{
int num1 = 100;
int num2 = 1000; int nSum = CLib_add(num1,num2);
int nSub = CLib_sub(num1,num2); printf("nSum = %d,nSub = %d\r\n",nSum,nSub); return 0;
}
</pre><pre name="code" class="cpp">4、<strong>C++的方式调用C语言编写的静态库</strong>
在CPP环境使用C静态库。库中函数原型定义要添加extern "C",比如:extern "C" int Add(...);
//C++函数必须声明,这是C++的函数特点
//C函数不必声明。这是C的特点
//C++编译器编译函数时,必须找到声明,依照那种方式给函数进行编译。 extern "C" int CLib_add(int num1,int num2);
extern "C" int CLib_sub(int num1,int num2); //extern "C" 给c++编译器看,这个是依照C语言格式进行编译.
//以上二句是给编译器看得. #pragma comment(lib,"..\\clib\\clib.lib")
//以上一句代码是给链接器看的. int main(void)
{
int num1 = 100;
int num2 = 1000; nSum = CLib_add(num1,num2);
nSub = CLib_sub(num1,num2); cout<<"nSum = "<<nSum<<" nSub = "<<nSub<<endl; return 0;
}
C语言编写静态链接库及其使用的更多相关文章
- C语言动静态链接库使用(笔记)
看了视频一直没空写........... C静态链接库不用说了跟你写在cpp文件里的函数一样不会有单独的模块 不再赘述生活中用的比较少 例子 .h文件 int Plus(int x, int y); ...
- vs2019编写c++的静态链接库并自己使用
参考网址:https://blog.csdn.net/flame333/article/details/108346305 静态链接库1.新建一个静态库项目,其中有两个头文件,两个源文件 其中比较重要 ...
- Linux环境下c语言静态链接库和动态链接库创建和使用
库有动态与静态两种,动态通常用.so为后缀,静态用.a为后缀. 面对比一下两者: 静态链接库:当要使用时,连接器会找出程序所需的函数,然后将它们拷贝到执行文件,由于这种拷贝是完整的,所以一旦连接成功, ...
- 动态链接库dll,静态链接库lib, 导入库lib
转载地址:http://www.cnblogs.com/chio/archive/2008/08/05/1261296.html 目前以lib后缀的库有两种,一种为静态链接库(Static Libar ...
- 动态链接库dll,导入库lib,静态链接库lib
目前以lib后缀的库有两种,一种为静态链接库(Static Libary,以下简称“静态库”),另一种为动态连接库(DLL,以下简称“动态库”)的导入库(Import Libary,以下简称“导入库” ...
- GCC编译过程与动态链接库和静态链接库
1. 库的介绍 库是写好的现有的,成熟的,可以复用的代码.现实中每个程序都要依赖很多基础的底层库,不可能每个人的代码都从零开始,因此库的存在意义非同寻常. 本质上来说库是一种可执行代码的二进制形式,可 ...
- 目前以lib后缀的库有两种,一种为静态链接库(Static Libary,以下简称“静态库”),另一种为动态连接库(DLL,以下简称“动态库”)的导入库(Import Libary,以下简称“导入库”)。静态库是一个或者多个obj文件的打包
前以lib后缀的库有两种,一种为静态链接库(Static Libary,以下简称“静态库”),另一种为动态连接库(DLL,以下简称“动态库”)的导入库(Import Libary,以下简称“导入库”) ...
- C运行时库(C Run-time Library)详解(提供的另一个最重要的功能是为应用程序添加启动函数。Visual C++对控制台程序默认使用单线程的静态链接库,而MFC中的CFile类已暗藏了多线程)
一.什么是C运行时库 1)C运行时库就是 C run-time library,是 C 而非 C++ 语言世界的概念:取这个名字就是因为你的 C 程序运行时需要这些库中的函数. 2)C 语言是所谓的“ ...
- VC++中的C运行时库浅析(控制台程序默认使用单线程的静态链接库,而MFC中的CFile类已暗藏了多线程)
1.概论 运行时库是程序在运行时所需要的库文件,通常运行时库是以LIB或DLL形式提供的.C运行时库诞生于20世纪70年代,当时的程序世界还很单纯,应用程序都是单线程的,多任务或多线程机制在此时还属于 ...
随机推荐
- CentOS6.X安装10G需要额外安装的软件包
yum -y install libXp yum -y install libXp.i686 yum -y install libXtst.i686
- JS如何动态生成变量名[重点]
解决方案: function create_variable(num){ var name = "test_"+num; //生成函数名 ...
- C#中对XML的操作
现在有一个xml文件,名称:BookStore.xml,数据如下: <?xml version="1.0" encoding="gb2312"?>& ...
- COGS——C2098. Asm.Def的病毒
http://www.cogs.pro/cogs/problem/problem.php?pid=2098 ★☆ 输入文件:asm_virus.in 输出文件:asm_virus.out ...
- Android Material风格的应用(二)--RecyclerView
添加RecyclerView Android Material风格的应用(一)--AppBar TabLayoutAndroid Material风格的应用(二)--RecyclerViewAndro ...
- 编程——C语言的问题,堆栈
堆和栈的区别一.预备知识—程序的内存分配一个由c/C++编译的程序占用的内存分为以下几个部分 1.栈区(stack)— 由编译器自动分配释放 ,存放函数的参数值,局部变量的值等.其操作方式类似于数据结 ...
- 2013腾讯编程马拉松初赛第〇场(HDU 4503) 湫湫系列故事——植树节
http://acm.hdu.edu.cn/showproblem.php?pid=4503 题目: 已知湫湫的班里共有n个孩子,每个孩子有Bi个朋友(i从1到n),且朋友关系是相互的,如果a小朋友和 ...
- (转)Oracle EXP-00091解决方法
转自:http://blog.csdn.net/dracotianlong/article/details/8270136 EXP-: 正在导出有问题的统计信息. . . 正在导出表 WF_GENER ...
- 内存、时间复杂度、CPU/GPU以及运行时间
衡量 CPU 的计算能力: 比如一个 Intel 的 i5-2520M @2.5 Ghz 的处理器, 则其计算能力 2.5 * 4(4核) = 10 GFLOPS FLOP/s,Floating-po ...
- IOS日期转为今天昨天形式
近期项目有类似QQ空间展示动态的UI,模仿了QQ空间的时间显示.在此记录,以备查阅. 这是QQ空间的ui: 时间显示为: 1.今天-->今天 xx:xx(今天 15:39) 2.昨天--> ...