#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?)