未定义的SDL_Init引用

miq*_*l09 4 sdl mingw codeblocks winmain

我今天开始使用SDL并且之前遇到了一些麻烦,现在我已经运行但它不会让我初始化它.

这是我的代码:

#include <iostream>
#include "SDL.h"
#undef main

using namespace std;

int main(){
    if(SDL_Init(SDL_INIT_EVERYTHING)<0){
        cout << "error starting sdl" << endl;
    }
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

这个构建日志:

-------------- Build: Debug in Graphics (compiler: GNU GCC Compiler)---------------

mingw32-g++.exe -Wall -g -std=c++11 -IC:\Users\73638G75MA\Documents\SDL2-2.0.3\x86_64-w64-mingw32\include\SDL2 -I"C:\Users\73638G75MA\Documents\C++ projects\Graphics" -c "C:\Users\73638G75MA\Documents\C++ projects\Graphics\main.cpp" -o obj\Debug\main.o
mingw32-g++.exe -LC:\Users\73638G75MA\Documents\SDL2-2.0.3\x86_64-w64-mingw32\lib -o bin\Debug\Graphics.exe obj\Debug\main.o  -lmingw32 -lSDL2main -lSDL2  
obj\Debug\main.o: In function `main':
C:/Users/73638G75MA/Documents/C++ projects/Graphics/main.cpp:8: undefined reference to `SDL_Init'
collect2.exe: error: ld returned 1 exit status
Process terminated with status 1 (0 minute(s), 0 second(s))
1 error(s), 0 warning(s) (0 minute(s), 0 second(s))
Run Code Online (Sandbox Code Playgroud)

我会在这方面提供所有可能的帮助,#undef main在开始时是因为它不会让我运行它.如果不存在,它会给我一个"对winmain @ 16的未定义引用",而我正在创建一个控制台应用程序.

Dav*_*cek 6

根据包含和库搜索路径...\SDL2-2.0.3\x86_64-w64-mingw32\...,您尝试使用64位SDL2进行构建.从编译器名称来看mingw32-g++,我会说你正在使用mingw.org工具链根据Code :: Blocks下载页面和我对codeblocks-13.12mingw-setup.exe内容的检查,包含的工具链是32-仅位,不能创建64位二进制文​​件,也不能使用64位库.

如果您想使用预先构建的SDL2,您需要下载匹配的工具链(64位mingw-w64)并使用它,或者更改构建参数以使用32位版本的SDL2(它存在于开发库存档i686-w64-mingw32目录中).