第五天2017/04/06(下午3:静态链接库(Lib))

原文链接:http://blog.csdn.net/xiaoding133/article/details/8973436

一、静态链接库和动态链接库
1.静态链接库(.LIB):函数和数据被编译进一个二进制文件。发布时,只需要发布这个可执行文件,并不需要发布被使用的静态库。
2.动态库(.DLL):在使用动态库的时候,往往提供两个文件:一个引入库(.lib)文件和一个DLL(.dll)。虽然引入库和静态库的后缀名相同,但是差别很大。对于一个DLL来说,其引入库文件包含该DLL导出的函数和变量的符号名,而.dll文件包含DLL的实际的函数和数据。在使用动态链接库的情况下,在编译链接可执行文件时,只需要DLL的引入库文件,而在运行可执行程序时,需要加载所需要的DLL,“发布产品时,需要发布调用的动态链接库”。

二、静态链接库的创建和引用

这里写图片描述

【创建静态库】
//DLL.h头文件声明2个函数:一个在.cpp中实现,一个在.c中实现

#ifndef _LIB_H_ 
#define _LIB_H_ 

#ifdef __cplusplus
#include <iostream>
using namespace std;
extern "C"   
{
#endif

    int add(int a, int b);   
    void  show();  

#ifdef __cplusplus
};
#endif

#endif 
------------------------------------------------------------------------------------------
//define_add.cpp中实现add()函数
#include "LIB.h"  

int add(int a,int b)  
{  
#ifdef __cplusplus
    printf("DLL生成使用成功:add()函数 —— C++编译环境\n");
    return a+b; 
#else
    printf("DLL生成使用成功:add()函数 —— C编译环境\n");
    return a+b; 
#endif
}  


------------------------------------------------------------------------------------------
//define_show.c中实现show()函数

#include "LIB.h"

void  show()
{
#ifdef __cplusplus
    printf("\nDLL生成使用成功:show()函数 —— C++编译环境\n");
#else
    printf("\nDLL生成使用成功:show()函数 —— C编译环境\n");
#endif
}

【注解】创建和调用LIB与DLL的相同点、不同点
与创建动态库DLL相同点:
    可以实现C与C++的混合编程#ifdef __cplusplus extern "C"{#endif //函数的声明 #ifdef __cplusplus }#endif
    创建LIB静态库时,在.h声明函数,.c或.cpp中实现函数,.c或.cpp中调用函数 、
    #ifdef...#else...#endif(#ifdef __cplusplus...#else...#endif) 、 
    防止重定义头文件#ifndef...#define...#endif
    #define 

与创建动态库DLL不同点:
    __declspec(dllexport)不是必须的(是可有可无),但是在创建DLL时该关键字是必须的。

===========================================================================================
【使用静态库LIB.lib】
将上面生成的LIB.lib和LIB.h文件拷贝到新建工程项目的目录下,并且添加下面代码:

//main.c调用LIB.lib中的2个函数
#include "LIB.h"

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

int main()
{
    printf("add(1,2) = %d\n",add(1,2));
    show();

    getchar();
}

---------------------------------------------------------
//main.cpp调用LIB.lib中的2个函数
 #include "LIB.h"
#pragma comment(lib,"LIB.lib")

int main()
{
    cout<<"add(1,2) = "<<add(1,2)<<endl;
    show();

    getchar();
}
【仔细一点你会发现:在main.c和main.cpp代码中输出部分有微小差别】因为main.c文件中没有cout、endl等关键字,所以我们用stdio.h里边的关键字printf进行输出。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值