2011-08-15 8 views
10

내 게임을 glut에서 sdl로 마이그레이션하려고했습니다.단순히 SDL 헤더를 포함하면 링커 오류가 발생합니다

과음에는 완벽하게 작동하지만 일부 sdl 기능을 사용하고 싶습니다.

그래서 내가, 내가, 위상을 구축 컴파일됩니다 프로그램을 클릭 목표 제목 아래, 내 프로젝트 속성에 가서 라이브러리와 바이너리 링크, SDL.framework를 추가

내가 OpenGL을 위해했던 것처럼 똑같은 .framework 및 GLUT.framework

그러나 나는 추가 할 때 : 내가 빌드 할 때 #include <SDL/SDL.h>이 링커 오류와 함께 온다 :

Undefined symbols for architecture x86_64: 
    "_main", referenced from: 
     __start in crt1.o 
    (maybe you meant: _SDL_main) 
ld: symbol(s) not found for architecture x86_64 
clang: error: linker command failed with exit code 1 (use -v to see invocation) 

단순히 인터넷 검색을하는 것은 공정한 몇 가지 결과를 초래하지만, 실제의 설명.

답변

8

SDL은 매크로를 사용하여 main(..)의 이름을 바꾸고 자체를 제공해야하며 일반적으로 SDLmain.m으로 구현됩니다. SDL.framework와 함께 제공되어야합니다.

여기에서 프레임 워크를 다운로드 할 때 http://www.libsdl.org/download-1.2.phpdevel-lite 폴더의 ReadMeDevLite.txt을 읽으십시오. 건축 x86_64에 대한

정의되지 않은 심볼 :
"_main"에서 참조 :
암시 적 항목/주요 실행 파일을 시작

또 다른 설명을 http://www.meandmark.com/sdlopenglpart2.html

+0

저는 Mac 기반 개발에 익숙하지 않습니다. .m 파일이 무엇인지 확실하지 않습니다. 그런 것들을 정렬하는 방법을 설명 할 수 있습니까? – Blam

+2

@Blam, A .m 파일은 Objective-C 파일입니다. Mac 버전의 SDL은 Objective-C로 작성되었습니다. SDLMain.h 및 SDLMain.m 파일을 프로젝트에 추가하십시오. Mac OS X에서 SDL 앱을 컴파일하는 데 필요한 접착제 코드가 포함되어 있습니다. –

2

나는 오류를 얻을 때 것을 발견했다
(아마도 당신은 _SDL_main을 의미했습니다)

프로젝트 -> 빌드 단계 -> 소스 컴파일 및 SDLMain.m을 목록에 추가하십시오. 이것은 바로 저를위한 문제를 해결했습니다.

관련 문제