静态库
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);
以上是关于静态库的主要内容,如果未能解决你的问题,请参考以下文章