我正在使用 Windows 7、Code::Blocks 和 MinGW。在编译/构建任何东西时,我几乎没有经验,尤其是当 Code::Blocks 不使用 makefile 时。
我从http://www.libsdl.org/tmp/download-2.0.php下载了 SDL2-devel-2.0.0-mingw.tar.gz (SDL 开发库),我想创建一个独立的可执行文件使用SDL2 库,但到目前为止,我总是必须将 SDL2.dll 文件与可执行文件捆绑在一起才能使其工作。
我听说我不能静态链接动态库,所以我唯一的选择似乎是使用上面提到的链接中的文件 SDL2-2.0.0.tar.gz(源代码)对源文件做一些事情。但是,我不知道我应该如何处理这些。
我设法使用源文件尝试将 Visual Studio 项目导入 Code::Blocks 并构建它,但它告诉我“sdl-config 没有这样的文件或目录”(我不知道是什么触发了它)。我也不确定构建是否只是给了我一个可执行文件,我不知道我可以做些什么来将它链接到我自己的可执行文件。
一个万无一失的白痴的分步指南将是解决此案的最佳选择。
编辑:
我设法使用 Jonas 提供的指南编译了 SDL 库,并获得了一个 libSDL2.a 文件。
起初我只将 libSDL2.a 的路径添加到“链接库:”-Code::Blocks 部分,但我遇到了一堆错误,例如“SDL_Init() 未在此范围内声明”。
除了 libSDL2.a 路径,我还添加了 SDL2-2.0.0\include 的路径到 Compiler 的搜索目录,以及 SDL2-2.0.0\build.libs 的路径到 Linker 的搜索目录。我还将它写到我的测试文件中:#include "SDL.h"。我的测试文件现在看起来像这样:
#include "SDL.h"
int main( int argc, char* args[] ) {
//Start SDL
SDL_Init( SDL_INIT_EVERYTHING );
//Quit SDL
SDL_Quit();
return 0;
}
看来它确实解决了声明问题,但现在 Code::Blocks 打开了一个 SDL_mmjoystick.c 文件并给了我更多错误:“未定义对'waveInClose@4'的引用”、“对'waveOutClose@4'的未定义引用”、 “对'joyGetNumDevs@0'的未定义引用”和其他大量引用。
这是正在发生的事情的屏幕截图,注意#include 文本的不同颜色,我不确定为什么会发生这种情况:http: //gyazo.com/00656a9c1e57a2bd0db1414fa7d68ced.png
我不确定如何正确使用这个库。在这种情况下有什么帮助,还是我应该为此提出另一个问题?
编辑:
我将 -lSDL2 添加到链接器选项并删除了其他参数。现在它构建良好:
mingw32-g++.exe -Wall -fexceptions -g -IC:\Users\User\Desktop\SDL2-2.0.0\include -c "C:\Users\User\Desktop\CppProjects\SDL project\main.cpp" -o obj\Debug\main.o
mingw32-g++.exe -Wall -fexceptions -g -IC:\Users\User\Desktop\SDL2-2.0.0\include -c "C:\Users\User\Desktop\CppProjects\SDL project\thetestfile.cpp" -o obj\Debug\thetestfile.o
mingw32-g++.exe -LC:\Users\User\Desktop\SDL2-2.0.0\build\.libs -o "bin\Debug\SDL project.exe" obj\Debug\main.o obj\Debug\thetestfile.o -lSDL2 ..\..\SDL2-2.0.0\build\.libs\libSDL2.a C:\Users\User\Desktop\SDL2-2.0.0\build\.libs\libSDL2.a -mwindows
Output size is 945.80 KB
Process terminated with status 0 (0 minutes, 1 seconds)
0 errors, 0 warnings (0 minutes, 1 seconds)
但是当我尝试运行它时,它说我的计算机缺少 SDL2.dll,而重点是静态链接。
因此,目前我的链接库 -settings 中有 build/.libs 的路径,其他链接器选项中有 -lSDL2,对于搜索目录,我有编译器和 SDL2-2.0 的 SDL2-2.0.0/include 的路径。 0/build/.libs 用于链接器。
在 build/.libs 目录中我还可以看到 libSDL2.a、libSDL2.dll.a、libSDL2.la 和 libSDL2.lai 文件,我不知道它们是什么。