zoukankan      html  css  js  c++  java
  • 静态库

    一、C语言静态库

      1、创建C语言静态库,并封装函数:

        1)创建新工程:Win32 Static Library

          

        2)添加SourceFiles文件:Clib.c

          

          Clib.c中的内容:      

    //定义C的静态库
    
    int Clib_add(int add1, int add2) {
        return add1 + add2;
    }
    
    int Clib_sub(int sub1, int sub2) {
        return sub1 - sub2;
    }
    

        3)编译、链接

          在当前工程的Debug文件夹下生成Clib.lib文件

          将生成的Clib.lib文件统一放置于工作区下的lib文件夹中,修改VC6的菜单栏->工程->设置->Library->输出文件名:../lib/Clib.lib

          重新Build后,在工作区的lib文件中生成Clib.lib文件

      2、调用C语言静态库的函数

        1)创建工作工程:Win32 Console Application

          

        2)添加SourceFiles文件:UseClib.c

          

          UseClib.c中的内容:      

    //调用C的静态库
    
    //通知链接器去哪抓源代码
    #pragma comment(lib,"../lib/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)有两种方法通知链接器寻找库的路径

          ①方法一:#pragma comment(lib,"../lib/Clib.lib")

          ②方法二:修改VC6菜单栏->工程->设置->连接->对象/库模块:->结尾插入:(空格)../lib/Clib.lib

    二、C++静态库

      1、创建C++静态库,并封装函数:

        1)创建新工程:Win32 Static Library

          

        2)添加SourceFiles文件:CPPlib.cpp

          

          CPPlib.cpp中的内容:      

    //创建C++静态库
    
    int CPPlib_add(int add1,int add2){
        return add1+add2;
    }
    
    int CPPlib_sub(int sub1,int sub2){
        return sub1-sub2;
    }
    

        3)编译、链接

          为将生成的CPPlib.lib文件统一放置于工作区下的lib文件夹中,修改VC6的菜单栏->工程->设置->Library->输出文件名:../lib/CPPlib.lib

          Build后在工作区的lib文件夹中生成CPPlib.lib文件

      2、调用C++静态库的函数:

        1)创建工作工程:Win32 Console Application

          

        2)添加SourceFiles文件:UseCPPlib.cpp

          

          UseCPPlib.cpp中的内容:      

    //调用C++静态库、C静态库
    
    //让编译器编译通过
    #include <stdio.h>
    int CPPlib_add(int add1,int add2);
    int CPPlib_sub(int sub1,int sub2);
    
    //让链接器链接静态库
    #pragma comment(lib,"../lib/CPPlib.lib")
    
    /***********************************************************************************/
    //C++编译器调用C静态库时会对库中的函数进行换名,需使用extern "C"来抑制C++编译器的换名
    extern "C"int Clib_add(int add1,int add2);
    extern "C"int Clib_sub(int sub1,int sub2);
    #pragma comment(lib,"../lib/Clib.lib")
    /***********************************************************************************/
    
    int main(){
        int sum=CPPlib_add(5,4);
        int sub=CPPlib_sub(5,4);
        printf("sum=%d,sub=%d
    ",sum,sub);
        
        /********************************/
        sum=Clib_add(5,8);
        sub=Clib_sub(5,8);
        printf("sum=%d,sub=%d
    ",sum,sub);
        /********************************/
    
        return 0;
    }
    

        3)C++编译器在调用静态库(无论是C语言静态库还是C++静态库)中的函数时,须进行函数声明:

          #include <stdio.h>

          int CPPlib_add(int add1,int add2);

          int CPPlib_sub(int sub1,int sub2);

        4)有两种方法通知链接器寻找库的路径

          ①方法一:#pragma comment(lib,"../lib/CPPlib.lib")

          ②方法二:修改VC6菜单栏->工程->设置->连接->对象/库模块:->结尾插入:(空格)../lib/CPPlib.lib

        5)C++编译器在调用C语言静态库中的函数时,会对函数进行换名,须使用extern “C”来抑制C++编译器的换名

          extern "C"int Clib_add(int add1,int add2);

          extern "C"int Clib_sub(int sub1,int sub2);

  • 相关阅读:
    win7桌面的文件路径是否可以更改
    win10怎么更新flash到最新版本【系统天地】
    centos7 lnmp环境部署
    thinkphp5 部署注意事项
    linux下导入、导出mysql数据库命令的实现方法
    Centos7 系统下怎么更改apache默认网站目录
    centos7 配置lamp 环境
    Redis笔记(4)独立功能的实现
    Redis笔记(3)多数据库实现
    Redis笔记(2)单机数据库实现
  • 原文地址:https://www.cnblogs.com/zhouwanqiu/p/6921063.html
Copyright © 2011-2022 走看看