C++封装静态链接库和使用
作者:互联网
零碎记事
距离上次发博客已经有一年半了,转眼间我也是从做图像研究到了做游戏开发,说起来看看前面的博文,本来就有前兆的东西呢(笑)......因为主要还是在使用虚幻引擎,所以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)。