2014-02-27 3 views
0

"legacy openGL"x "SDL 1.x"에서 OpenGL3 + x SDL2로 그래픽 프로그래밍을 업그레이드하려고 시도하면서 링크 문제가 발생했습니다. 많은 연결 매개 변수를 시도했지만 아무 것도 작동하지 않는 것 같습니다. Windows에서 MinGW Netbeans 7.0 및 SDL 2의 프로젝트에 연결

나는 SDL1 연결 PARAMS을 시도 : 나는처럼에 SDL2 코드를 추가 할 때 1

#include <SDL2/SDL.h> 

int main(int argc, char **argv) 
{ 

    if(SDL_Init(SDL_INIT_VIDEO) < 0) 
    { 
     SDL_Quit(); 

     return -1; 
    } 

    SDL_Quit(); 

    return 0; 
} 

목록 코드를하지만 : 연결 1

-lmingw32 -lSDLmain -lSDL 

그것은이 코드를 잘 작동 목록 이 : 코드 목록 2

#include <SDL2/SDL.h> 

int main(int argc, char **argv) 
{ 
    SDL_Window* window(0); 

    if(SDL_Init(SDL_INIT_VIDEO) < 0) 
    { 
     SDL_Quit(); 

     return -1; 
    } 

    window = SDL_CreateWindow("Test SDL 2.0", SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED, 800, 600, SDL_WINDOW_SHOWN); 

    SDL_DestroyWindow(window); 
    SDL_Quit(); 

    return 0; 
} 

나는 연결 오류를 얻을 : 오류가 1

g++  -o dist/Debug/MinGW-Windows/sdl2 build/Debug/MinGW-Windows/main.o -lmingw32 -lSDLmain -lSDL 
build/Debug/MinGW-Windows/main.o: In function `SDL_main': 
C:\Users\Paikuhan\Documents\NetBeansProjects\SDL2/main.cpp:21: undefined reference to `SDL_CreateWindow' 
C:\Users\Paikuhan\Documents\NetBeansProjects\SDL2/main.cpp:23: undefined reference to `SDL_DestroyWindow' 

collect2.exe: error: ld returned 1 exit status 

이에 연결 PARAMS을 swaping 목록 : 2

-lmingw32 -lSDL -lSDLmain 

목록 연결 더 많은 오류를 제공 (내가 그들을 쓰지 않습니다 하위). 는 '2'과 같이 PARAMS에 추가 : 3

-lmingw32 -lSDL2main -lSDL2 

목록 연결하는 것은 나에게 2 초 않고보다 더 많은 연결 오류를 제공합니다 : 목록 오류 2

g++  -o dist/Debug/MinGW-Windows/sdl2 build/Debug/MinGW-Windows/main.o -lmingw32 -lSDL2main -lSDL2 
build/Debug/MinGW-Windows/main.o: In function `SDL_main': 
C:\Users\Paikuhan\Documents\NetBeansProjects\SDL2/main.cpp:14: undefined reference to `SDL_Init' 
C:\Users\Paikuhan\Documents\NetBeansProjects\SDL2/main.cpp:16: undefined reference to `SDL_Quit' 
C:\Users\Paikuhan\Documents\NetBeansProjects\SDL2/main.cpp:21: undefined reference to `SDL_CreateWindow' 
C:\Users\Paikuhan\Documents\NetBeansProjects\SDL2/main.cpp:23: undefined reference to `SDL_DestroyWindow' 
C:\Users\Paikuhan\Documents\NetBeansProjects\SDL2/main.cpp:24: undefined reference to `SDL_Quit' 
c:/programs/mingw/bin/../lib/gcc/mingw32/4.8.1/../../../../mingw32/lib/libmingw32.a(main.o): In function `main': 
e:\p\giaw\src\pkg\mingwrt-4.0.3-1-mingw32-src\bld/../mingwrt-4.0.3-1-mingw32-src/src/libcrt/crt/main.c:91: undefined reference to `[email protected]' 
collect2.exe: error: ld returned 1 exit status 

없는 하나의 SDL 마치 함수가 발견되었고 lib 디렉토리에 라이브러리 (libSDL2.a, libSDL2.dll.a, libSDL2.la, libSDL2main.a, pkgconfig \ sdl2.pc)가 있습니다. 연결이

$(pkg-config --cflags --libs sdl2) 

사를 나열하고 그 어떤 좋은하지 않습니다 나는 또한 넷빈즈에 this set of params를 사용했습니다. 아무도 이것에 나를 도울 수 있습니까. 고맙습니다!

+0

. SDL2 헤더 파일은 어디에 두었습니까? 이 폴더를 컴파일러 검색 폴더에 추가 했습니까? – jordsti

+0

오, MinGW32 컴파일러의 버전은 무엇입니까? – jordsti

+0

안녕하세요, -lmingw32 -lSDL2main -lSDL2 및 -lmingw32 -lSDL2 -lmingw32 -lSDL2main 두 가지 모두 동일한 오류를 표시합니다 (오류 목록 2).컴파일러를 사용하고 모든 적절한 헤더와 라이브러리를 찾을 수 있도록 netbeans를 설정하려면이 자습서 https://netbeans.org/community/releases/73/cpp-setup-instructions.html#compilers를 참조하십시오. 즉 MinGW 및 MSYS 도구 용 바이너리 경로를 내 PATH에 추가합니다. 나는 컴파일러가 필요한 파일을 찾은 넷빈 덕분에 알고있다. 왜냐하면 "-lSDL2main"을 찾을 수 없다는 링크 오류가 나타나기 때문에 !! g ++ -v는이 "gcc 버전 4.8.1 (GCC)"을 제공합니다. –

답변

0

문제가 해결되었습니다. 나는 연결 오류를 해결하려고했습니다. 이제 모든 것이 잘 작동합니다! LazyFoo's tutorial has the answer "32 비트 라이브러리가 포함 된 가장 중요한 i686-w64-mingw32 [...] 이것은 중요합니다. 대부분의 컴파일러는 기본적으로 32 비트 바이너리를 컴파일하여 호환성을 최대화합니다 [...]". 그래서 나는 해당 디렉토리에서 32 비트 파일을 모두 다시 추출했습니다. 이제는 모든 것이 매력처럼 작동합니다. 내 생각 엔 32 비트 mingw 컴파일러와 함께 64 비트 라이브러리를 사용했다.

두 연결 매개 변수가 모두 잘 작동합니다. 이 :

$(pkg-config --cflags --libs sdl2) 

나이 :

당신은 두 번째 시간처럼, SDL2 전에 SDL2main 연결해야
-lmingw32 -lSDL2main -lSDL2