Pergunta

Eu tenho tentado para produzir uma versão estaticamente ligado "único binário" do meu jogo para Windows. Eu quero vincular com SDL, SDL_image e SDL_mixer que por sua vez força em algumas bibliotecas de apoio. Infelizmente eu não encontrei uma maneira de levá-los todos para compilar e link usando cygwin / mingw / gcc. Tanto quanto eu posso dizer todas as versões públicas existentes apenas são compartilhadas bibliotecas / dlls.

Por favor note que eu não estou falando sobre o licenciamento aqui. A fonte será aberto assim a GPL / LGPLness da SDL não é relevante.

Foi útil?

Solução

Ao compilar seu projeto, você precisa fazer apenas algumas alterações em seu makefile.

  • Em vez de sdl-config --libs, uso sdl-config --static-libs
  • Surround o uso do sdl-config --static-libs acima mencionado com -Wl,-Bstatic e -Wl,-Bdynamic. Isto diz GCC para forçar vinculação estática, mas apenas para as bibliotecas especificadas entre eles.

Se o seu makefile parece atualmente como:

SDLLIBS=`sdl-config --libs`

mude para:

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

Estes são realmente as mesmas coisas que você deve fazer em Unix-like sistemas, mas normalmente não causa tantos erros no Unix-gosta, se você usar o sinalizador -static simples de GCC, como ele faz no Windows.

Outras dicas

Por isso SDL lista de discussão pós parece que as ferramentas de desenvolvimento sdl fornecido com um script sdl-config que você pode usar com a bandeira --static-libs para determinar o que bandeiras vinculador que você precisa para uso.

Ambiente: VMWare máquina virtual com Windows 7 x64 e equipamento que Dev c + + compilação 7.4.2.569, g complilador + + (TDM-1) 4.6.1

Uma vez, SDL2-2.0.3 API instalado como configuração Dev c ++ não é muito claro o que eu fiz como a tradição exige linha de comando.

O primeiro problema é que o Windows 7 parece ter mudado a metodologia e eles vão para a sua bola. Inventário. Ref. https://stackoverflow.com/users/464581/cheers-and-hth-alf

Depois do primeiro obstáculo, SDL_platform.h é tão ruim, que é baixo o outro, eu não me lembro onde eu baixei, mas o próximo não funciona na versão indicada.

Devemos colocar ls SDL2.h no diretório do executável.

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

Eu finalmente compilado e funciona testes SDL2.

Isso porque as bibliotecas SDL estão sob a LGPL-licença.

Se você quiser vínculo estático as libs (você pode fazer isso se o seu recompilação-los. É preciso algum invadir os makefiles embora) você tem que colocar o seu jogo sob alguma licença de código aberto compatível também.

Os SDL-libs vir como bibliotecas compartilhadas porque a maioria dos programas que os utilizam são de código fechado. A distribuição binária vem em uma forma que a maioria das pessoas precisa.

No meu sistema (Ubuntu) eu tenho que usar as seguintes bandeiras:

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

que liga SDL, SDL_image, e muitas de suas dependências como estático. libdl você nunca quer estática, de modo a fazer um binário totalmente estática que utiliza SDL_image é uma má idéia. pulso, caca, aa, e directfb provavelmente pode ser feita estática. Eu não tenho o suficiente para entendê-los ainda.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top