我一直在尝试为我的 Windows 游戏生成一个静态链接的“单一二进制”版本。我想链接 sdl、sdl_image 和 sdl_mixer,它们又会引入一些支持库。不幸的是,我还没有找到一种方法让它们全部使用 cygwin/mingw/gcc 进行编译和链接。据我所知,所有现有的公共(public)版本都只是共享库/dll。
请注意,我在这里不是在谈论许可。源将是开放的,因此 sdl 的 GPL/LGPLness 不相关。
最佳答案
编译项目时,只需对 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 系统上做的事情,但如果您使用更简单的 -static
,它通常不会在类 Unix 系统上引起那么多错误。标记为 GCC,就像在 Windows 上一样。
关于windows - 如何在 Windows 上静态编译 SDL 游戏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/115813/