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\n", 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; }
运行结果:
【推荐】还在用 ECharts 开发大屏?试试这款永久免费的开源 BI 工具!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步