21.windows库程序(一)

1.分类

  (1)静态库程序

     运行时不存在,会被链接到可执行文件或动态库中,目标程序的归档。

     文件扩展名:LIB

  (2)动态库程序:

     运行时独立存在,不会被链接到可执行文件或其他动态库中。

     文件扩展名:DLL

2.静态库程序

  (1)特点

     运行时不存在

     链接到可自行文件或者动态库中

     目标程序的归档

3.C语言静态库

  (1)使用

     建立一个c文件,可以在文件中使用c库函数,不需要头文件。c编译器只是根据库函数名称,在库中找到对应的函数代码进行链接。

  (2)创建

     建项目

     添加库程序,源文件使用c文件

     库的路径设置

       项目的属性->链接器->输入->附加依赖项中设置库路径

       使用pragma关键字设置,#pragma comment(lib,"..\lib\clib.lib")

  相关代码:

  静态库

int Clib_add(int a, int b)
{
    return a + b;
}

int Clib_sub(int a, int b)
{
    return a - b;
}

  使用静态库

//通知链接器(LINK.EXE)到哪里找源代码
#pragma comment(lib, "..\lib\T03_Clib.lib")

int main()
{
    int sum, sub;
    sum = Clib_add(5, 3);
    sub = Clib_sub(5, 3);
    printf("sum=%d, sub=%d
", sum, sub);

    return 0;
}

  运行结果:

  

3.C++语言的静态库

  (1)创建静态库

     建立项目

     添加库程序,源文件使用cpp文件

  (2)导入库

     项目的属性->链接器->输入->附加依赖项中设置库路径

     使用pragma关键字设置

  (3)注意

     在C++环境中使用C静态库,函数原型定义要增加extern "C"

  相关代码:

  静态库

int CPPlib_add(int a, int b)
{
    return a + b;
}


int CPPlib_sub(int a, int b)
{
    return a - b;
}

  使用静态库

#include <iostream>

int CPPlib_add(int, int);
int CPPlib_sub(int, int);
//以上三句是给编译器看的

//通知链接器到哪里找源代码
#pragma comment(lib, "../lib/T04_CPPlib.lib")

extern "C" int Clib_add(int, int);
extern "C" int Clib_sub(int, int);
#pragma  comment(lib, "../lib/T03_Clib.lib")


int main()
{
    int sum, sub;
    sum = CPPlib_add(5, 4);
    sub = CPPlib_sub(5, 4);
    std::cout << sum << " " << sub << std::endl;
    /*
    为什么C++中必须要有函数声明,C却不需要呢?
    因为C++编译器有两种编译方式:换名、不换名,编译器需要知道是按哪种方式编译,所以要在声明时指明
    而C编译器只有一种编译方式:不换名
    */
    sum = Clib_add(5, 3);
    sub = Clib_sub(5, 3);
    std::cout << sum << " " << sub << std::endl;
    return 0;
}

  运行结果:

  

原文地址:https://www.cnblogs.com/csqtech/p/5656417.html