Я использую 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 используется не очень часто. Кроме того, ссылка на версию Linux на сайте SDLMappy, похоже, устарела, по крайней мере, для меня она никуда не денется.
Что-то еще, что может быть связано с этим, заключается в том, что в какой-то момент в коде SDLMappy есть вызов fopen_s, который не работает в Linux. Я использовал определение
#define fopen_s(fp, fmt, mode) *(fp)=fopen( (fmt), (mode))
чтобы исправить это, но я не знаю, есть ли какие-либо различия в чтении файла с fopen и fopen_s в Windows / Linux, которые могут быть причиной проблемы. Я не мог ничего найти.
Задача ещё не решена.
Других решений пока нет …