现在我发现这不是一个独特的问题并且之前已经被提出过很多次,但是我遵循了其他堆栈溢出问题中给出的建议但似乎没有任何帮助。
我的问题很简单,我无法编译我的项目(一个基本的 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/