mingw和SDL命令行

时间:2014-03-12 14:43:06

标签: c++ mingw sdl

现在我看到这不是一个独特的问题,之前已经提出了很多次,但我已经按照其他堆栈溢出问题给出的建议,似乎没有任何帮助。

我的问题很简单,我无法编译我的项目(一个基本的c ++ gui)并包含SDL,因为我得到:未定义的引用WinMain @ 16

我开始使用code :: blocks但它没有工作,所以转而试图在Windows 7,64位的命令行上编译最简单的实现,试图了解后台发生的事情。

我正在运行的命令:

g++ test.cpp -L C:\Projects\C++\tester\SDL\lib -lmingw32 -LSDLmain -LSDL -mwindows

我在-l参数中遇到了一个奇怪的问题,因为我在SDL包含文件夹的路径中添加了C:\Projects\C++\tester\SDL\includes,但是如果我这样做,则会发错误说它找不到这个目录,显然我检查了并重新检查路径以确保它是正确的,但将其删除会消除错误。我现在很可能是问题的原因。

this question中的答案非常全面,有助于进一步了解问题 但似乎暗示问题是没有定义主要功能,这似乎有意义,但SDL是否重新定义SDL_main.h中SDL_main的主要功能?

#define main SDL_main

我想指出我是一个c ++ noob。

#include <string.h> 
#include "SDL\include\SDL.h" 
#include <iostream> 

int main(int argc, char*argv[]) 
{ 
    return 0; 
} 

1 个答案:

答案 0 :(得分:1)

好的,我发现了你的错误。

您可能知道,-L指定链接路径,而-l指定要链接的库。你的命令说:

-L C:\Projects\C++\tester\SDL\lib -lmingw32 -LSDLmain -LSDL -mwindows
                                            ^^        ^^

错误地使用-L代替-l。你打算写:

-L C:\Projects\C++\tester\SDL\lib -lmingw32 -lSDLmain -lSDL -mwindows

关于libSDL2的

编辑

首先,您需要加入<SDL2/SDL.h>。您还需要关联-lSDL2main-lSDL2

但是,这里的主要问题是,在构建和链接64位版本的libSDL2时,您正在链接-lmingw32,它需要32位架构。如果您构建并链接到32位版本的libSDL2,那么一切都会好的。

如果您的MinGW安装是32位,那么您将无法使用32位版本而需要使用32位库。如果是64位,则需要替换-lmingw32。也许使用-lmingw64,但我没有安装64位MinGW来测试它,我也不知道-lmingw64是否确实存在。