静态库

Posted Autumn の Box

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了静态库相关的知识,希望对你有一定的参考价值。

一、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\\n",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\\n",sum,sub);
    
    /********************************/
    sum=Clib_add(5,8);
    sub=Clib_sub(5,8);
    printf("sum=%d,sub=%d\\n",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);

 

以上是关于静态库的主要内容,如果未能解决你的问题,请参考以下文章

片段内部静态类和gradle问题

GCC/MingW 在不同版本上编译

Chrome-Devtools代码片段中的多个JS库

Xamarin Android 片段库

片段 null 必须是公共静态类才能从实例状态正确重新创建

片段中的网格视图