문제

나는 Windows용 게임의 정적으로 링크된 "단일 바이너리" 버전을 생성하려고 노력해 왔습니다.sdl, sdl_image 및 sdl_mixer와 연결하여 몇 가지 지원 라이브러리를 가져오고 싶습니다.불행하게도 나는 cygwin/mingw/gcc를 사용하여 컴파일하고 링크하도록 하는 방법을 찾지 못했습니다.내가 알 수 있는 한 기존의 모든 공개 버전은 공유 라이브러리/dll일 뿐입니다.

여기서는 라이센스에 대해 이야기하는 것이 아닙니다.소스가 공개되므로 sdl의 GPL/LGPL 특성은 관련이 없습니다.

도움이 되었습니까?

해결책

프로젝트를 컴파일할 때 makefile에서 몇 가지만 변경하면 됩니다.

  • 대신에 sdl-config --libs, 사용 sdl-config --static-libs
  • 위에서 언급한 용도를 둘러싸고 있습니다. sdl-config --static-libs ~와 함께 -Wl,-Bstatic 그리고 -Wl,-Bdynamic.이는 GCC에게 정적 링크를 강제하도록 지시하지만, 둘 사이에 지정된 라이브러리에 대해서만 적용됩니다.

현재 makefile이 다음과 같은 경우:

SDLLIBS=`sdl-config --libs`

다음으로 변경하세요.

SDLLIBS=-Wl,-Bstatic `sdl-config --static-libs` -Wl,-Bdynamic

이것들은 실제로 당신과 같은 것입니다 ~해야 한다 Unix 계열 시스템에서 수행하지만 더 간단한 방법을 사용하면 일반적으로 Unix 계열 시스템에서 많은 오류가 발생하지 않습니다. -static Windows에서와 마찬가지로 GCC에 플래그를 지정합니다.

다른 팁

이를 통해 SDL 메일링 리스트 게시물 sdl 개발 도구에는 사용해야 할 링커 플래그를 결정하기 위해 --static-libs 플래그와 함께 사용할 수 있는 sdl-config 스크립트가 함께 제공되는 것 같습니다.

환경:Windows 7 x64 및 장비가 포함된 VMWare 가상 머신 Dev c + + 빌드 7.4.2.569, 컴파일러 g+ + (tdm-1) 4.6.1

Dev c++ 구성으로 설치된 SDL2-2.0.3 API는 전통적으로 명령줄이 필요하기 때문에 내가 수행한 작업이 명확하지 않습니다.

첫 번째 문제는 Windows 7이 방법론을 변경한 것으로 보이며 공을 들이게 된다는 것입니다.목록.참조. https://stackoverflow.com/users/464581/cheers-and-hth-alf

첫 번째 장애물 이후에는 SDL_platform.h가 그렇게 나쁘고 또 다른 장애물에 있습니다. 어디서 다운로드했는지 기억이 나지 않지만 다음 버전은 표시된 버전에서 작동하지 않습니다.

SDL2.h ls를 실행 파일 디렉터리에 넣어야 합니다.

D:\prg_desa\zsdl2>g++ bar.cpp main.cpp -o pepe1 -ID:\SDL2-2.0.3\i686-w64-mingw32\include\SDL2 -LD:\SDL2-2.0.3\i686-w64-mingw32\lib -lmingw32 -lSDL2main -lSDL2 -mwindow

마침내 SDL2 테스트를 컴파일하고 작동했습니다.

이는 SDL 라이브러리가 LGPL 라이센스를 따르기 때문입니다.

libs를 정적으로 링크하려면(libs를 다시 컴파일하면 그렇게 할 수 있습니다.)하지만 makefile에 대한 해킹이 필요합니다.) 호환 가능한 오픈 소스 라이선스에 따라 게임을 배치해야 합니다.

SDL-lib는 이를 사용하는 대부분의 프로그램이 비공개 소스이기 때문에 공유 라이브러리로 제공됩니다.바이너리 배포판은 대부분의 사람들에게 필요한 형태로 제공됩니다.

내 시스템(Ubuntu)에서는 다음 플래그를 사용해야 합니다.

-Wl,Bstatic -lSDL_image `sdl-config --libs` -lpng12 -lz -ltiff -ljpeg -lasound -laudio -lesd -Wl,-Bdynamic `directfb-config --libs` -lpulse-simple -lcaca -laa -ldl

SDL, SDL을 연결하는 것_이미지이며 그 종속성의 대부분은 정적입니다.libdl은 절대 정적을 원하지 않으므로 SDL을 사용하는 완전 정적 바이너리를 만듭니다._이미지는 나쁜 생각입니다.pulse,caca,aa 및 directfb는 아마도 정적으로 만들 수 있습니다.나는 아직 그것들을 알아낼 만큼 충분히 멀지 않았습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top