windows里静态库的创建与应用

首先了解概念:静态库与动态库

静态库:程序在编译时,有预处理,编译,汇编和链接的阶段;静态库是在链接的时,由连接器找到库文件中的所需要的代码,并将所需要的代码拷贝到可执行文件中。

                于是可执行文件中有所需要代码的完整备份,这就是特点。缺点是:缺点就是被多次使用就会有多份冗余拷贝。

动态库:程序在运行时,由系统动态加载到内存,可供多个程序使用的代码。 优点:节约了内存。

                但是对动态库文件有依赖,当动态库文件被删除时,可执行程序将不能再运行。

------------------------------------------------

静态库和动态库是两种共享程序代码的方式,它们的区别是:静态库在程序的链接阶段被复制到了程序中,和程序运行的时候没有关系;动态库在链接阶段没有被复制到程序中,而是程序在运行时由系统动态加载到内存中供程序调用。使用动态库的优点是系统只需载入一次动态库,不同的程序可以得到内存中相同的动态库的复本,因此节省了很多内存。

--------------------------------------------------

 

环境:vc++6.0

新建工程 WIN32 STATIC LIBRARY

然后新建源文件,头文件

源文件(add.c) 如下:

#include<add.h>

int add(int a, int b)

{

    return a+b;

}

头文件(add.h)如下:

#ifndef _add_h

#define _add_h

int add(int a, int b);

#endif

 

然后编译连接。于是在目录debug下就会形成一个 *.lib 的文件

现在静态库的创建已经完成,那么如何使用呢?

新建一个项目,在源文件里面加入如下的话:

#include "add.h"

#pragma comment(lib, "myname.lib")

然后在源文件里面用在静态库里写的函数。。。

 

这时发生一个错误:

unresolved external symbol "int __cdecl addInC1(void)" (?addInC1@@YAHXZ)

 

这个错误的原因是:C++ 调用 C 函数时发生的错误

 

直接在.cpp里面写 #include "c.h"引用C头文件会在连接的时候出现此类错误:cpp.obj : error LNK2001: unresolved external symbol "int __cdecl add(int,int)" ([email=?add@@YAHHH@Z]?add@@YAHHH@Z[/email]).

根本原因在于:      C++ 和 C在对函数命名方式的不同。

C对函数的命名: _add  

C++对函数的命名: =?add@@YAHHH@Z

错误解释是找不到C++函数 (?addInC1@@YAHXZ).

 

解决方法:

 

修改 #include "c1.h"   

extern "C" 
{
     #include "c1.h"
}

-------------------------------------------------------------------------------------------

现在问题得到解决,windows下的静态库创建与应用成功

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值