我使用的是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的路径添加到编译器的搜索目录以及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;
}
Run Code Online (Sandbox Code Playgroud)
它似乎确实解决了声明问题,但现在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 …Run Code Online (Sandbox Code Playgroud)