C++封装静态链接库和使用 -转自 CSDN 零碎记事
C++封装静态链接库和使用
转自 CSDN 零碎记事
距离上次发博客已经有一年半了,转眼间我也是从做图像研究到了做游戏开发,说起来看看前面的博文,本来就有前兆的东西呢(笑)......因为主要还是在使用虚幻引擎,所以C++的东西会碰到多一些。
以后程序技术方面的文章就放博客,游戏设计相关的杂谈就放知乎那边吧,博主的知乎可以通过友链过去。
B站那边的账号也打算开始复活,后面是更新游戏设计杂谈类的视频还是更新虚幻技术方面的视频还在犹豫不决......
为什么要把程序封装成库
有时我们需要把自己的程序交给第三方调用,但是又不想被别人看到自己的具体实现代码,就封装成库给别人使用。库有动态链接库和静态链接库,区别是动态链接库可以在程序运行时动态链接,而静态链接库相当于.cpp文件,在编译时的链接阶段就链接进去了。
博主的环境
系统:Window 10
IDE:VS2022
如果在使用的是其他IDE的,看完这个自己应该也能知道用其他IDE该怎么操作,其实就是一个对编译和链接过程的理解深度的问题,懂了在哪里都能自己封装和使用库的。
这边的演示有中文路径,VS对中文路径支持得确实还挺可以的,不会报错。不过建议大家还是尽量别这样了,就怕万一你那边对中文路径支持不好,编译出问题。
封装步骤
准备好待封装的程序
我准备了一个Point类,就当做是要给别人用的,现在我就把这个类封装成静态库。
//Point.h #pragma once #include <utility> typedef std::pair<int, int> Coordinate; class Point { private: Coordinate location; public: Point(); Point(int x, int y); Coordinate GetLocation(); int GetX() const; int GetY() const; virtual Point operator + (const Point& B) const; virtual Point operator - (const Point& B) const; };
//Point.cpp #include "Point.h" Point::Point() : location(Coordinate(0, 0)) { } Point::Point(int x, int y): location(Coordinate(x, y)) { } Coordinate Point::GetLocation() { return location; } int Point::GetX() const { return location.first; } int Point::GetY() const { return location.second; } Point Point::operator+(const Point& B) const { return Point(GetX()+B.GetX(), GetY()+B.GetY()); } Point Point::operator-(const Point& B) const { return Point(); }
开始封装
配置项目
平常我们是编译成可执行文件(即.exe),现在我们设置一下,改成编译成静态库(即.lib)。
这个设置在VS2022里是这样的:
右击项目->属性->配置属性->常规->配置类型->改为静态库
这样我们编译出来的东西就不是.exe文件,而是.lib文件了,也就是静态链接库。
编译
这边在VS2022里,编译就是生成。
就跟编译普通程序一样,编译成功。
找到编译好的静态库
自己翻翻项目下面的文件夹,能找到编译出来的静态库的。
我这边是 项目根目录/x64/Debug/项目名.lib,就是下图里的那个Point.lib,这就是静态库。
打包
其实就是把头文件跟静态库一起给别人就行了,静态库的作用跟.cpp文件差不多,使用时就是包含头文件,然后链接到静态库把实现关联起来即可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET10 - 预览版1新功能体验(一)