我正在为一个小游戏使用 SDL,由于我在这个游戏中需要一张地图,所以我使用SDLMappy来做到这一点。现在在 Windows 上一切正常,我设计了一个示例地图,保存为 .FMP 文件,程序正在加载并完美显示。
最近我切换到 Linux (Manjaro)。我现在将 CLion 与 Cmake 一起使用,并且程序编译得很好(在我必须为 linux 更改许多其他内容之后),但地图无法再加载。通过调试我发现,错误发生在这里:
if (mapfilesize!=static_cast<long int>(mapbyteswapl(mapgenheader.headsize) + 8)) maperror = MER_MAPLOADERROR;
mapfilesize 为 3698985,不等式的另一侧计算为 1179468120
我在谷歌上搜索了很长时间,但似乎 SDLMappy 的使用并不多。此外,SDLMappy 站点上的 linux 版本的链接似乎已经过时,至少对我来说它无处可去。
可能与此有关的其他事情是,在 SDLMappy 代码中的某个时刻,有一个 fopen_s 调用在 linux 下不起作用。我使用了定义
#define fopen_s(fp, fmt, mode) *(fp)=fopen( (fmt), (mode))
解决这个问题,但我不知道在 Windows/Linux 中使用 fopen 和 fopen_s 读取文件是否有任何差异可能导致问题。我找不到任何东西。