本篇讲述使用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语言编写静态链接库及其使用的更多相关文章

  1. C语言动静态链接库使用(笔记)

    看了视频一直没空写........... C静态链接库不用说了跟你写在cpp文件里的函数一样不会有单独的模块 不再赘述生活中用的比较少 例子 .h文件 int Plus(int x, int y); ...

  2. vs2019编写c++的静态链接库并自己使用

    参考网址:https://blog.csdn.net/flame333/article/details/108346305 静态链接库1.新建一个静态库项目,其中有两个头文件,两个源文件 其中比较重要 ...

  3. Linux环境下c语言静态链接库和动态链接库创建和使用

    库有动态与静态两种,动态通常用.so为后缀,静态用.a为后缀. 面对比一下两者: 静态链接库:当要使用时,连接器会找出程序所需的函数,然后将它们拷贝到执行文件,由于这种拷贝是完整的,所以一旦连接成功, ...

  4. 动态链接库dll,静态链接库lib, 导入库lib

    转载地址:http://www.cnblogs.com/chio/archive/2008/08/05/1261296.html 目前以lib后缀的库有两种,一种为静态链接库(Static Libar ...

  5. 动态链接库dll,导入库lib,静态链接库lib

    目前以lib后缀的库有两种,一种为静态链接库(Static Libary,以下简称“静态库”),另一种为动态连接库(DLL,以下简称“动态库”)的导入库(Import Libary,以下简称“导入库” ...

  6. GCC编译过程与动态链接库和静态链接库

    1. 库的介绍 库是写好的现有的,成熟的,可以复用的代码.现实中每个程序都要依赖很多基础的底层库,不可能每个人的代码都从零开始,因此库的存在意义非同寻常. 本质上来说库是一种可执行代码的二进制形式,可 ...

  7. 目前以lib后缀的库有两种,一种为静态链接库(Static Libary,以下简称“静态库”),另一种为动态连接库(DLL,以下简称“动态库”)的导入库(Import Libary,以下简称“导入库”)。静态库是一个或者多个obj文件的打包

    前以lib后缀的库有两种,一种为静态链接库(Static Libary,以下简称“静态库”),另一种为动态连接库(DLL,以下简称“动态库”)的导入库(Import Libary,以下简称“导入库”) ...

  8. C运行时库(C Run-time Library)详解(提供的另一个最重要的功能是为应用程序添加启动函数。Visual C++对控制台程序默认使用单线程的静态链接库,而MFC中的CFile类已暗藏了多线程)

    一.什么是C运行时库 1)C运行时库就是 C run-time library,是 C 而非 C++ 语言世界的概念:取这个名字就是因为你的 C 程序运行时需要这些库中的函数. 2)C 语言是所谓的“ ...

  9. VC++中的C运行时库浅析(控制台程序默认使用单线程的静态链接库,而MFC中的CFile类已暗藏了多线程)

    1.概论 运行时库是程序在运行时所需要的库文件,通常运行时库是以LIB或DLL形式提供的.C运行时库诞生于20世纪70年代,当时的程序世界还很单纯,应用程序都是单线程的,多任务或多线程机制在此时还属于 ...

随机推荐

  1. 深入理解HTTP协议及原理分析之缓存(3种缓存机制)

    3.2 缓存的实现原理 3.2.1什么是Web缓存 WEB缓存(cache)位于Web服务器和客户端之间. 缓存会根据请求保存输出内容的副本,例如html页面,图片,文件,当下一个请求来到的时候:如果 ...

  2. 106.TCP传文件

    客户端 #define _CRT_SECURE_NO_WARNINGS #include <stdio.h> #include <stdlib.h> #include < ...

  3. Flume Sinks官网剖析(博主推荐)

    不多说,直接上干货! Flume Sources官网剖析(博主推荐) Flume Channels官网剖析(博主推荐) Flume Channel Selectors官网剖析(博主推荐) 一切来源于f ...

  4. 使用jmeter监控服务器性能指标

    先下载jmeter-ServerAgent Windows下载和Linux下载 https://jmeter-plugins.org/wiki/PerfMon/  找到ServerAgent的下载链接 ...

  5. 使用Docker来运行WebApp

    原文:使用Docker来运行WebApp (作者:陈玓玏) 1.加载镜像到容器并运行webapp脚本 先进入管理员模式: su root 然后使用已有的webapp镜像来练习在docker上运行web ...

  6. 洛谷 P1206 [USACO1.2]回文平方数 Palindromic Squares

    P1206 [USACO1.2]回文平方数 Palindromic Squares 题目描述 回文数是指从左向右念和从右向左念都一样的数.如12321就是一个典型的回文数. 给定一个进制B(2< ...

  7. C++ 多线程阻塞 (多线程同步)(MsgWaitForMultipleObjects)(连着消息一起控制,牛)

    在主线程定要禁止使用waitforsingleobject(),原因是会阻塞主线程的消息循环,所以必须使用另一种 MsgWaitForMultipleObjects,即可以让消息通过,下面就是一个基于 ...

  8. 动态规划 —— 求解通配符问题(wildcard)

    he?p help, heap, √ hellp, × *p*(必须包含 p,左右随意) help, papa, √ hello × *bb*(必须包含连续的两个 bb,左右随意) babbc √ 1 ...

  9. 【习题 5-8 UVA - 230】Borrowers

    [链接] 我是链接,点我呀:) [题意] 在这里输入题意 [题解] 用map+set写个模拟就好. 3个区域 书架.桌子.别人的手上. 其中前两个区域的书都能借出去. [代码] #include &l ...

  10. zynq mac地址修改

    工作中遇到多个zynq板子同时位于一个交换机网络中,由于默认mac地址相同,无法进行通信,因此需要对每个板子修改mac地址. 方案:使用uboot配置文件 步骤: 在uboot配置文件中添加及修改下面 ...