小编Dis*_*pEd的帖子

SDL2库的静态链接

我使用的是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)

sdl codeblocks static-linking sdl-2

12
推荐指数
1
解决办法
3万
查看次数

标签 统计

codeblocks ×1

sdl ×1

sdl-2 ×1

static-linking ×1