引用 SDL 静态编译教程 的话:
SDL(Simple DirectMedia Layer)是一套开放源代码的跨平台多媒体开发库,使用 C语言 写成。本文主要介绍 SDL 库的静态编译方法。SDL 当前是第二版,开源协议改为 Zlib 授权模式,官方文档上描述虽然 SDL 可以编译为静态库,但不会主动介绍静态库的编译方法,也不推荐将 SDL 编译为静态库使用,不过在很多场合下,静态编译去除依赖可以让程序看起来更便捷。
但对于 GNU 家的 MinGW 来说,解决方法远没有那篇文章介绍的那么繁琐,官方也在其发布文件 /bin
中的 sdl-config
中明确指出了静态链接方法。(开源万岁!(不是)
运行 ${prefix}/bin/sdl-config --static-libs --cflags --libs
可以获得
-L${exec_prefix}/lib -lmingw32 -lSDL2main -lSDL2 -mwindows -Wl,--dynamicbase -Wl,--nxcompat -Wl,--high-entropy-va -lm -ldinput8 -ldxguid -ldxerr8 -luser32 -lgdi32 -lwinmm -limm32 -lole32 -loleaut32 -lshell32 -lsetupapi -lversion -luuid
其中 ${exec_prefix}
替换成你存 SDL 库的地方。(正确安装的话不用加-L
也可)
所以只需 g++ main.cpp
加上上面一堆就好了。当然 strip 后才能获得正常的静态链接可执行文件大小(2-3MB)。