2015-12-16 9 views
3

После компиляции приложения в mingw-w64 64-bit Shell он отлично работает внутри оболочки, но дает ошибку the application was unable to start correctly (0xc00007b) при нормальной работе, вне оболочки .Приложение, скомпилированное в mingw-w64/msys2, «приложение не смогло начать правильно (0xc00007b«

я переехал некоторые из необходимых библиотек DLL из msys2/MinGW-w64 бен каталогов, когда он жаловался на отсутствие их, но теперь она дает эту непрозрачную ошибку. Что я делаю неправильно?

ответ

1

ошибка 0xc00007b в основном средства «недопустимый формат изображения», который обычно происходит при смешивании 64-разрядных и 32-разрядных DLL. Что происходит, это то, что у вас есть 64-разрядное приложение, которое ищет конкретную DLL, который равен в глобальном пути, но один из путей 32-разрядный. Поэтому проблема в том, что она не жалуется на недостающую DLL, она просто пытается ее загрузить. Поскольку это 32-разрядное приложение, а ваше приложение - это 64-разрядное приложение, вы получаете ошибку 0xc00007b.

Решение должно копировать все зависимые DLL к пути приложения.

Следующая проблема заключается в том, что вы не знаете, какие из них.

Что вы можете сделать с msys2 оболочки: перейти в каталог и выполнить команду:

ldd application.exe 

Это даст вам список библиотек DLL приложение зависит. Скопируйте связанные библиотеки msys2/mingw-w64 в каталог. Это позволит приложению найти их, прежде чем искать в PATH и найти 32-разрядные библиотеки DLL.

+2

[Dependency Walker] (http://www.dependencywalker.com/) отображает все зависимости, которые связаны с использованием динамической компоновки времени компиляции. Как и ваш подход к использованию 'ldd', он не будет учитывать зависимости, которые связаны с использованием динамической компоновки времени выполнения (Dependency Walker позволяет вам профилировать ваше приложение, чтобы вы могли поймать некоторые из них таким образом). – IInspectable

+0

@ Я не уверен, я знаю об игуаторе зависимости. Это отличный инструмент. Не использовали его в течение многих лет. 'ldd' является частью mingw-w64, поэтому я счел полезным использовать это. –

+0

Спасибо за полезную тему. Не уверен, что это вызывает мою проблему, но это ценно в любом случае. Поскольку это может быть связано: (A) Может ли это произойти при обратном запуске 32-разрядной кросс-скомпилированной программы в 64-разрядной ОС и (B) Знаете ли вы, почему, тогда как запуск из проводника или командной строки дает эту ошибку - при запуске из той же MSYS2-поставляемой оболочки 'mingw32', программа просто выходит немедленно без видимой ошибки? –

 Смежные вопросы

  • Нет связанных вопросов^_^