我已经试图产生一个静态连接的"单个二版"我的游戏。我要链接与sdl,sdl_image和sdl_mixer这反过来拉几支持图书馆。不幸的是我还没有找到一种方式,获得他们所有的汇编和使用cygwin/mingw/gcc。我可以告诉所有现有的公共版本是唯一共用图书馆/dll。

请注意,我说的不是有关颁发许可证在这里。来源将是开放的,因此GPL/LGPLness sdl是不相关的。

有帮助吗?

解决方案

在编制项目,需要做的只是几个改变你的makefile。

  • 而不是的 sdl-config --libs, 使用 sdl-config --static-libs
  • 环绕着利用上面提到的 sdl-config --static-libs-Wl,-Bstatic-Wl,-Bdynamic.这告诉海湾合作委员会强迫静联,但只适用于图书馆之间指定他们。

如果你makefile目前看起来像:

SDLLIBS=`sdl-config --libs`

更改为:

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

这实际上是同样的事情你 应该 在类Unix系统上,但它通常不会导致为许多错误Unix-喜欢,如果您使用更简单的 -static 标志海湾合作委员会,像它确实在窗。

其他提示

通过这个 SDL邮件列表帖子似乎sdl开发工具附带了一个sdl-config脚本,您可以使用--static-libs标志来确定需要使用哪些链接器标志。

环境:使用Windows 7 x64和设备的VMWare虚拟机我们开发+编译7.4.2.569,complilador 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(你可以这样做,如果你重新编译它们。虽然需要对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