我正在使用Windows 7、Code::Blocks和MinGW。在编译/构建任何东西方面,我几乎没有什么经验,特别是当Code::Blocks不使用makefiles时。
我从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 No such file or directory”(我不知道是什么触发了这个)。而且,我也不确定编译是否只给我一个可执行文件,我也不知道我可以用它来链接到自己的可执行文件。
一个傻瓜式的逐步指南可能是解决此问题的最佳选择。
编辑:
我成功地使用Jonas提供的指南编译了SDL库,并得到了一个libSDL2.a文件。
起初,我只将libSDL2.a的路径添加到Code::Blocks的“链接库:”部分,但我遇到了一堆错误,如“SDL_Init() not declared in this scope”。
除了libSDL2.a的路径外,我还将SDL2-2.0.0\include的路径添加到编译器的搜索目录以及SDL2-2.0.0\build.libs的路径添加到链接器的搜索目录。我还在我的测试文件中写下了这句话:#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,而整个重点是要进行静态链接。
所以目前,在我的链接库设置中,我有构建/.libs的路径,其他链接器选项中有-lSDL2,并且对于搜索目录,编译器中有SDL2-2.0.0/include的路径,链接器中有SDL2-2.0.0/build/.libs的路径。
在build/.libs目录中,我还可以看到libSDL2.a、libSDL2.dll.a、libSDL2.la和libSDL2.lai文件,我不知道它们是什么。