c++ - mingw 和 SDL 命令行

标签 c++ mingw sdl

现在我发现这不是一个独特的问题并且之前已经被提出过很多次,但是我遵循了其他堆栈溢出问题中给出的建议但似乎没有任何帮助。

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

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

我正在运行的命令:

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

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

this question中的答案非常全面,有助于进一步理解问题 但似乎暗示问题是没有定义 main 函数,这似乎有道理,但 SDL 不会在 SDL_main.h 中将 main 重新定义为 SDL_main 吗?

#define main SDL_main

我想指出我是一个 C++ 菜鸟。

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

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

最佳答案

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

您可能知道,-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 .

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

如果您的 MinGW 安装是 32 位的,那么您只能使用 32 位构建,您需要使用 32 位库。如果是 64 位,-lmingw32需要更换。也许与 -lmingw64 , 但我没有安装 64 位 MinGW 来测试它,我不知道是否 -lmingw64是否真实存在。

关于c++ - mingw 和 SDL 命令行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22355010/

相关文章:

c++ - 当 WM_MOUSELEAVE 有时不起作用时,如何知道鼠标何时离开我的窗口?

c++ - QT:无法在启动/停止按钮中终止 Qprocess

c++ - Qt 在布局中自动排列小部件

c++ - 新安装 MinGW 问题,包含编译和可执行文件

c++ - 在我的新游戏中找不到内存泄漏?

c++ - SDL_GL_SetAttribute 不设置颜色大小

c++ - 将字符数组传递给使用构造函数初始化的类构造函数时防止溢出?

c++ - 为什么我的编译器不能识别 #include <thread> (c++)?

c++ - 程序无法启动,因为缺少 *.dll - MinGW、Eclipse、Windows 7

c - SDL2 音频问题 C 编程(不是混音器)