调用第三方库 (使用构建二进制文件)
WARNING
注意 该方法参考使用SDL这个第三方库来作为例子,其他第三方库的的使用可能会有所不同。
- 需要提前准备好git工具,各别库如opencv需要安装cmake工具。
SDL是一个跨平台的多媒体库,提供了对音频、键盘、鼠标、游戏手柄、3D硬件等的低级访问。它被广泛用于游戏开发和多媒体应用程序中。
TIP
安装并使用第三方库的步骤大致相同,以下是一个通用的步骤。
- 从github上面克隆代码库
- 进入代码库目录,个别需要进行编译构建二进制文件,但是有些库已经编译好了二进制文件,可以直接使用,还有一些只包含头文件的库,使用
include
包含即可使用。具体看README文件。 - 找到克隆下来的代码库的
include
,lib
,bin
目录,分别是头文件和二进制文件的目录。 - 在代码中使用
include
包含头文件,使用lib
目录下的二进制文件。- 在vscode中使用
tasks.json
文件来配置编译选项。 - 使用
-I
选项来指定头文件的目录,使用-L
选项来指定二进制文件的目录,使用-l
选项来指定要链接的库。(注意:-l
选项后面不需要加lib
前缀和.a
后缀)
- 在vscode中使用
- 之后就可以在代码中使用这个库了。
DANGER
注意
- SDL库在github直接克隆是没有编译好的二进制文件的,需要自己编译构建二进制文件。这个步骤我们会讲,请查看下面构建二进制文件使用SDL库的步骤。
- 但是在release版本中是有编译好的二进制文件的,选择你需要的版本直接使用。这个步骤我们也会讲。
1. 安装SDL库(需要自己编译构建二进制文件)
- 先去github克隆SDL的代码库
bash
git clone https://github.com/libsdl-org/SDL.git
- 克隆完成后,进入SDL目录,发现没有lib与bin目录,则需要编译构建二进制文件。找到
cmake
文件夹,进入该目录,执行以下命令:
bash
cmake -G "MinGW Makefiles" -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=./ ..
cmake --build .
cmake --install .
查看输出的信息会发现生成了
include
,lib
与bin
目录,分别是头文件和二进制文件的目录。在bin下面的SDL2.dll
是动态链接库,lib下面的libSDL2.a
是静态链接库,include下面的SDL2
是头文件目录。接下来需要链接头文件和库文件。我一般喜欢链接bin
目录下的动态链接库。打开
vscode
,新建一个文件夹,命名为SDL_test
,在该目录下新建一个main.cpp
文件,输入以下代码:
cpp
#include <SDL.h>
#include <iostream>
int main(int argc, char* argv[]) {
// 初始化 SDL
if (SDL_Init(SDL_INIT_VIDEO) != 0) {
SDL_Log("无法初始化 SDL: %s", SDL_GetError());
return 1;
}
// 创建窗口
SDL_Window* window = SDL_CreateWindow("最小 SDL 示例",
SDL_WINDOWPOS_CENTERED,
SDL_WINDOWPOS_CENTERED,
800, 600, 0);
if (!window) {
SDL_Log("无法创建窗口: %s", SDL_GetError());
SDL_Quit();
return 1;
}
// 创建渲染器
SDL_Renderer* renderer = SDL_CreateRenderer(window, -1, SDL_RENDERER_ACCELERATED);
if (!renderer) {
SDL_Log("无法创建渲染器: %s", SDL_GetError());
SDL_DestroyWindow(window);
SDL_Quit();
return 1;
}
// 设置背景颜色
SDL_SetRenderDrawColor(renderer, 0, 128, 255, 255);
SDL_RenderClear(renderer);
SDL_RenderPresent(renderer);
// 延迟 3000 毫秒
SDL_Delay(3000);
// 释放资源
SDL_DestroyRenderer(renderer);
SDL_DestroyWindow(window);
SDL_Quit();
return 0;
}
- 之后找到
.vscode
目录下的tasks.json
文件,添加以下代码: