Пример Allegro завершается со 127

#c #gcc #mingw #allegro #allegro5

#c #gcc #mingw #allegro #allegro5

Вопрос:

Мне успешно удалось скомпилировать и связать базовый пример из Allegro wiki (полностью без изменений), загрузив двоичные файлы и соответствующим образом настроив GCC на mingw32. Компиляция не приводит ни к каким ошибкам, как и связывание с библиотекой. На данный момент никакие другие библиотеки не используются.

При запуске результирующего исполняемого файла выходные потоки не отображаются, и программа завершается с кодом 127.

Я компилирую с использованием GCC 9.2.0 под 32-разрядным MinGW и запускаю 64-разрядную Windows. В случае несоответствия будут ошибки связывания, но это не так (к сожалению).

Я понятия не имею, что является причиной этого, и с удовольствием продолжил бы разработку, если бы это не приостановило ее. Любая помощь приветствуется.

Правка 1

GDB здесь не очень помогает, он говорит только следующее. Однако это дает лучшее представление о том, что означает код выхода — из того, что я прочитал 0xc0000139 , когда Windows не удается загрузить DLL. Я не совсем понимаю, почему, библиотеки DLL находятся на пути (в частности, в каталоге MinGW /bin ). Я также пытался поместить их в каталог исполняемого файла, но безрезультатно.

 (gdb) b main
Breakpoint 1 at 0x401421: file main.c, line 6.
(gdb) run
Starting program: D:devgenart-allegro/genart-allegro.exe
[New Thread 4712.0x1a2c]
[New Thread 4712.0x1674]
[New Thread 4712.0xfac]
[New Thread 4712.0x34d4]
During startup program exited with code 0xc0000139.
  

Правка 2

Статическое связывание Allegro решает проблему, однако я все еще не могу объяснить, почему динамическое связывание не работает.

Комментарии:

1. может быть, скомпилировать с -g -O0 и запустить через gdb ? Прервитесь на main , пройдите и посмотрите, что происходит.

2. Правильное связывание во время компиляции не означает, что вы правильно связываете во время выполнения. Я не очень помогаю на компьютере с Windows, но убедитесь, что любая разделяемая библиотека, к которой вы пытаетесь подключиться, находится в правильном месте. (system32?)