• 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;
    }

      运行结果:

      

  • 相关阅读:
    Structed Exception Handler 学习总结(五)
    Structed Exception Handler 学习总结(四)
    Structed Exception Handler 学习总结(三)
    Structed Exception Handler 学习总结(二)
    Structed Exception Handler 学习总结(一)
    关于模板的思考
    java中的exception与c++中的exception比较
    java中的exception
    在控制台(Console)环境下编译Windows GUI程序
    关于字符串的内存分配问题
  • 原文地址:https://www.cnblogs.com/csqtech/p/5656417.html
Copyright © 2020-2023  润新知