昆山市建设监察大队网站,自媒体视频剪辑培训班,有没有可以做翻译的网站,青岛胶南市城乡建设局网站目录
静态库
编写静态库
使用静态库
方案一
方案二
动态库
编写动态库
使用动态库
方案一
方案二
方案三
总结 静态库
静态库是在编译时将库的代码合并到最终可执行程序中的库。静态库的优势是在编译时将所有代码包含在程序中#xff0c;可以使程序独立运行…目录
静态库
编写静态库
使用静态库
方案一
方案二
动态库
编写动态库
使用动态库
方案一
方案二
方案三
总结 静态库
静态库是在编译时将库的代码合并到最终可执行程序中的库。静态库的优势是在编译时将所有代码包含在程序中可以使程序独立运行但增加了可执行文件的大小。
静态库需要.lib文件和一个.h文件程序正常使用.h的函数在链接选项里加入.lib文件或者#pragma comment手动加载
编写静态库
创建空项目添加文件右击项目属性修改生成目标为lib库 //print.h #pragma once #include iostream void print(); //print.cpp #include print.h void print() { std::cout 静态库测试 std::endl; } 使用静态库
lib需要.h文件和.lib文件如果没有把这两个文件复制到对应项目文件夹中的话就需要配置包含目录和库目录。
方案一
通过配置项目属性的方式进行添加到指定项目中去使用。 包含目录 .h文件目录 库目录 .lib文件目录 链接输入增加lib #include iostream #include print.h //切记需要包含头文件 int main() { print(); return 0; } 方案二
通过#pragma直接导入lib文件的方式但使用这种方式如果lib文件较多的话就会显得代码冗长。 #include iostream #include print.h //切记需要包含头文件 #pragma comment(lib,./print_func.lib) int main() { print(); return 0; } 动态库
动态库是在运行时加载到内存中的库。它们可以被多个程序共享减少了每个程序的内存占用和代码重复。动态库的优势是可在运行时更新库但需要确保正确的库版本和依赖关系。
编写动态库
创建空项目添加文件右击项目属性修改生成目标为dll库,操作方式和lib库方式相同。但编写dll函数需要_declspec(dllexport)特殊声明。
在 Windows 系统上当你将一个函数或符号定义为 __declspec(dllexport) 时这意味着该函数或符号将被标记为可从动态链接库DLL中导出。这使得其他程序或模块能够通过使用 __declspec(dllimport) 来引用该函数或符号。需要注意的是__declspec(dllexport) 是特定于 Microsoft Visual C 编译器的语法扩展。在其他平台和编译器上通常使用不同的导出和导入方式。因此如果你的代码需要在跨平台环境下移植或兼容其他编译器建议查阅相关文档或使用更通用的跨平台导出方式如使用预处理器宏或导出表等。 //Add.h #pragma once #include iostream _declspec(dllexport) int add(int a, int b); //Add.cpp #include Add.h int add(int a, int b) { return a b; } 使用动态库
dll需要.h文件、.lib文件以及.dll文件如果没有把这三个文件复制到对应项目文件夹中的话就需要配置包含目录和库目录。
方案一
将.h文件、.lib文件以及.dll文件置入工程所在目录然后添加对应的.h头文件类似配置第三方库的方式使用。 #include iostream #include Add.h #pragma comment(lib,add_func.lib) int main() { std::cout sum: add(1, 2) std::endl; return 0; } 方案二
WIN32 API函数LoadLibrary、GetProcAddress装载使用这种载入方法不需要.lib文件和.h头文件只需要.dll文件即可将.dll文件置入工程目录中 #include iostream #include windows.h typedef int(*DLLFunc)(int,int); int main() { DLLFunc func; HINSTANCE lib LoadLibrary(Ladd_func.dll); if (lib nullptr) { FreeLibrary(lib); return 0; } func (DLLFunc)GetProcAddress(lib, add); if (func nullptr) { FreeLibrary(nullptr); return 0; } std::coutfunc(1,2)std::endl; return 0; } 方案三
配置包含目录和库目录把dll文件放到.exe文件所在目录下点击exe就可运行。
总结
本篇文章主要介绍了如何封装和调用动态库和静态库静态库是在链接时使用的动态库是在运行时使用的dll相比于lib来说多了一个.dll文件调用静态库和动态库最简单的方法就是把对应文件放到文件目录中在调用时include头文件使用#pragma comment(lib,.lib文件名),便可。若文件较多为避免代码冗长则可配置包含目录、库目录以及附加依赖项从而可以直接使用。