2015-05-09 47 views
0

我今天開始使用SDL,之前遇到了一些麻煩,現在我運行了它,但它不會讓我初始化它。對SDL_Init的未定義引用

這是我的代碼:

#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; 
} 

此生成日誌:

-------------- 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)) 

我會apreciate這一切可能的幫助,在開始和#undef主要是因爲它不會否則讓我來運行它。如果它不在那裏,它會給我一個「未定義的引用來winmain @ 16」當我創建一個控制檯應用程序。

回答

2

根據include和庫搜索路徑...\SDL2-2.0.3\x86_64-w64-mingw32\...,您試圖使用64位SDL2進行構建。 從編譯器名稱 mingw32-g++判斷,我想說你使用的是mingw.org工具鏈 根據Code::Blocks download page和我對codeblocks-13.12mingw-setup.exe內容的檢查,包含的工具鏈僅僅是32位並且不能創建64位二進制文​​件,也不能使用64位庫。

如果您要使用預構建的SDL2,您需要下載匹配的工具鏈(64位mingw-w64)並使用它,或者更改構建參數以使用32位版本的SDL2(它存在於i686-w64-mingw32目錄中的development libraries archive中)。

+0

我使用的代碼塊的標準編譯器 – miquel09

+0

謝謝你現在的作品 – miquel09

3

這裏有幾個錯誤。

不要民主基金主要是因爲你不知道爲什麼它在這裏!當您使用SDL時,main()(幾乎)總是必須看起來像int main(int, char **) {}因此,刪除#undef main並將int main()更改爲int main(int, char **)

2.

建設X32可執行文件時,您必須使用i686-w64-mingw32,而不是x86_64-w64-mingw32內容。因此,請適當調整您的編譯標誌。

x86_64-w64-mingw32可能是用於x64應用程序,但我認爲您正在構建x32應用程序。