2016-02-29 50 views
0

我想編譯一個使用SDL進行上下文創建和圖像加載的OpenGL程序。當我在Linux上進行本地編譯時,它編譯並運行時沒有錯誤。我在/ opt/mxe中安裝了MXE,並且檢查了SDL2目錄(包含頭文件)在/opt/mxe/usr/i686-w64-mingw32.static/include/中,而相應的庫(libSDL.a等)位於/opt/mxe/usr/i686-w64-mingw32.static/lib/中。使用MXE和SDL2導致多個「未定義的引用」錯誤

所包含頭文件<SDL2/SDL.h><SDL2/SDL_image.h>

我試圖編譯使用

i686-w64-mingw32.static-gcc 5_transformation.c -I/opt/mxe/usr/i686-w64-mingw32.static/include -L/opt/mxe/usr/i686-w64-mingw32.static/lib -lmingw32 -lSDL2main -lSDL2 -lSDL2_image -lGLEW -lopengl32 -lm -mwindows

然而上述程序,它提供了多種未定義引用錯誤:[http://pastebin.com/JaadTNnv

] 1

許多這些錯誤似乎與Direct3D等有關,我不使用(但SDL2可能在內部)。我是否也必須與他們聯繫?我是否做對了? (MXE頁面似乎沒有任何詳細的說明)。

PS。這個問題,或者它的變種,似乎在互聯網上非常流行。不過,我已經遵循了他們的指示。我的主要功能定義爲int main(int argc, char *argv[]),我正在鏈接-lmingw32,-lSDL2main和-mwindows,我已經確認GCC參數中的路徑是正確的,我試圖將i686-w64-mingw32.static-sdl-config --cflags --libsi686-w64-mingw32.static-pkg-config SDL_image --cflags --libs 作爲參數,而不是顯式鏈接給出了對SDL功能的未定義參考,如SDL_GL_CreateContextIMG_Load,並表示Package SDL_image was not found in the pkg-config search path.)。

回答

0

我在/opt/mxe/安裝MXE和我下面的工作(我試圖編譯文件是5_transformation.c):

/opt/mxe/usr/bin/i686-w64-mingw32.static-gcc 5_transformation.c -mwindows `/opt/mxe/usr/bin/i686-w64-mingw32.static-pkg-config --cflags sdl2` `/opt/mxe/usr/bin/i686-w64-mingw32.static-pkg-config --cflags SDL2_image` -lmingw32 -lGLEW -lopengl32 -lm `/opt/mxe/usr/bin/i686-w64-mingw32.static-pkg-config --libs sdl2` `/opt/mxe/usr/bin/i686-w64-mingw32.static-pkg-config --libs SDL2_image` 

一定要得到的路徑正確的所有可執行文件(gcc以及pkg-config),把--cflags參數--libs人之前,請確保您的類型sdl2(小的情況下,SDL)和SDL2_image(在帽SDL),使用-mwindows-lmingw32和使用-lopengl32代替-lgl

1

您應該使用pkg配置--cflags SDL2pkg配置--libs SDL2得到所有你需要的CFLAGS和庫。 (順便說一句,不包括SDL2/SDL.h但只有SDL.h和使用pkg配置--cflags值來設置包含路徑,如果你想成爲更便攜)

而不是使用pkg配置的,你也可以使用SDL2-配置

如果這也是你的設置不奏效 - 然後簽出與MXE交付SDL2例子。將代碼添加到它,然後嘗試在mxe結帳中運行make sdl2(重新編譯)mxe中的sdl2。(https://github.com/mxe/mxe/commit/c3624cdefb7ff0c4b69316c7c1b740b97f55e1db

+0

我不得不玩弄路徑並點了點兒命令,但是pkg-config終於有效(sdl-config仍然沒有,出於某種原因) –