我一直在试图制作一个静态链接的“单一二进制”版本的Windows游戏。 我想链接到sdl,sdl_image和sdl_mixer,然后依次拉入一些支持库。 不幸的是,我还没有find一种方法让他们全部使用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系统上,这些实际上应该是相同的,但是如果使用更简单的GCC标志,就像在Windows上一样,在Unix上通常不会引起太多的错误。
通过SDL邮件列表发布 ,似乎sdl开发工具带有一个sdl-config脚本,您可以使用-static-libs标志来确定需要使用的链接器标志。
环境:VMWare虚拟机与Windows 7 x64和设备我们Dev c + +建立7.4.2.569,complilador g ++(tdm-1)4.6.1
一旦SDL2-2.0.3 API作为配置Dev c ++安装,我不太清楚我所做的传统需要命令行。
第一个问题是,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许可证下。
如果你想静态链接库(如果你重新编译它们,你可以这样做),但是你必须把你的游戏放在一些兼容的开源许可证下。
SDL-libs作为共享库,因为大多数使用它们的程序都是封闭的源代码。 二进制分布以大多数人需要的形式出现。
在我的系统上(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 _
image制作一个完全静态的二进制文件是一个糟糕的主意。 脉冲,caca,aa和directfb可能会变成静态的。 我还没有足够的了解,