SDL 2 对"WinMain@16"和多个 SDL 函数的未定义引用
SDL 2 Undefined Reference to "WinMain@16" and several SDL functions
我刚刚安装了SDL 2,我有一些严重的问题。这是我的代码:
#include <SDL2SDL.h>
int main(int argc, char* argv[]) {
SDL_Init(SDL_INIT_VIDEO);
SDL_Quit();
return 0;
}
我无法编译,因为我得到标题中描述的错误:
objDebugmain.o||In function SDL_main':|
C:UsersmyuserDesktoptest 2000main.cpp|5|undefined reference to SDL_Init'|
C:UsersmyuserDesktoptest 2000main.cpp|7|undefined reference to SDL_Quit'|
c:program filescodeblocksmingwbin..libgccmingw324.4.1......libmingw32.a(main.o):main.c|| undefined reference to WinMain@16'|
||=== Build finished: 3 errors, 0 warnings ===|
我想你要
#define SDL_MAIN_HANDLED
主文件中的,在
行之前#include <SDL2/SDL.h>
从:https://stackoverflow.com/a/32343111/5214543
发布编译器命令。例如:g++/gcc ....
您可能没有链接库。
http://content.gpwiki.org/index.php/SDL:教程:设置您应该有这个库的路径,包含在ide中。(我看到你正在使用代码块)
添加链接器设置:-lmingw32 -lSDLmain -lSDL
http://www.sdltutorials.com/sdl-tutorial-basics您需要以相同的顺序将它们添加到链接器库中:
mingw32
SDL2main
SDL2
虽然接受的答案是有效的(如果你完全遵循它,或者阅读评论),有一点需要注意:您必须按照给定的顺序链接库
g++ 01_hello_SDL.cpp -I{add correct path here}/include/SDL2 -L{add correct path here}/lib -lmingw32 -lSDL2main -lSDL2
如果您不希望控制台在窗口旁边运行,请将-mwindows
添加到选项
我一直在挣扎。
只要把sdl文件从你的程序文件移到你的桌面或文档等,并从那里链接到C。
认为这与Windows不允许C访问它们或其他什么有关。
希望这对你有帮助很酷的
我通过交换
int main(int argc, char* argv[])
与
int WINAPI WinMain(HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPSTR lpCmdLine,
int nCmdShow )
不知道为什么要说实话,然后我又转向了SFML
如果你使用的是CMakeLists.txt,这是cleion IDE的默认设置,你应该在末尾加上这一行:
target_link_libraries(space_fighters mingw32 SDL2main SDL2)
我也有同样的问题,我的情况是,因为我错过了"mingw32"
当我尝试在Windows 10上的Eclipse CDT 1909中构建和运行我最初在MacOS上的Eclipse中创建的项目时,我遇到了类似的问题。
我发现下面的步骤使用minGW64编译器工作。
RMB单击项目,选择properties。在项目属性> C/c++构建创建一个新的C/c++构建配置通过LMB点击管理配置和LMB点击新建,命名为Debug_Windows,将复制设置设置为默认配置,使其活跃,LMB点击确定,将配置设置为Debug_Windows。
设置项目属性> C/c++ Build>生成器设置>构建命令>当前生成器为CDT内部生成器
设置项目属性> C/c++构建>构建器设置>工具链编辑器>当前工具链为MinGW GCC
设置项目属性> C/c++ Build>生成器设置>工具链编辑器>当前生成器为CDT内部生成器
在Project Properties> C/c++ Build> Settings> GCC c++ Compiler> Includes中添加如下路径"C: 程序图书馆 SDL2-2.0.9 x86_64-w64-mingw32 SDL2"包括
在Project Properties> C/c++ Build> Settings> GCC c++ Linker> Libraries中添加如下路径"C: 程序图书馆 SDL2-2.0.9 x86_64-w64-mingw32 lib "
按顺序将以下库添加到项目属性> C/c++构建>设置> GCC c++链接器>库中SLD2mainSDL
导航到项目属性>运行/调试设置,LMB单击新建,选择C/c++应用程序,LMB单击确定,在C/c++应用程序字段输入Debug_Windowsproject_name.exe(用正确的值替换project_name).
将构建配置更改为Debug_Windows。
关闭项目属性。
添加预处理器指令#定义SDL_MAIN_HANDLED在包含main函数的文件的顶部。如果没有预处理器指令,程序将不能正确链接。
运行程序RMB点击项目,选择run as> run Configurations,选择为构建创建的运行配置。
将SDL2.dll复制到项目目录结构的顶层,就像复制到Debug或Debug_Windows目录一样,它在每次构建项目时都会被删除。
我发现的关键点是没有必要在链接器库中包含mingw32, #define SDL_MAIN_HANDLED需要在包含main的文件中,并且在#include .
- "error: no matching function for call to"构造函数错误
- 什么时候调用组成单元对象的析构函数
- std::函数,带有 SDL 事件回调的 lambda 错误
- 如何正确使用 SDL_DestroyTexture() 等 SDL 函数?
- 从SDL库的函数返回的指针
- SDL在析构函数上释放曲面失败
- SDL C++字体呈现函数中未处理的异常
- 创建指向成员函数的非常量指针,以便进行 SDL 事件筛选
- SDL fscanf 函数问题
- 我正在使用 SDL 函数,但没有定义SDL_main。这样好吗?
- SDL函数的未定义引用
- 为什么我们必须在主函数中传递参数,而在Mingw中设置sdl
- SDL-有时无法及时调用音频回调函数
- 执行函数与时间间隔SDL/c++
- SDL 2 对"WinMain@16"和多个 SDL 函数的未定义引用
- 指向SDL音频回调成员函数的指针
- 我找不到这个函数(SDL/OpenGL)的内存泄漏
- SDL c++: if函数不工作.编译精细-逻辑错误
- 使用复制构造函数后不渲染SDL纹理
- SDL析构函数调用太早