Ошибка выполнения (загрузка dll) с приложениями win32 в системе x64 при компиляции 0K - PullRequest
5 голосов
/ 21 марта 2011

Первоначально я разработал приложение win32 для win7 32bit с VC9.0. Недавно я обновил до win7 64 бит и попытался собрать + выполнить предыдущее приложение.

Сборка работает нормально (приложение win32), но во время выполнения я получаю сообщение об ошибке "[...] завершился с кодом -1073741701 (0xc000007b)."

Полагаю, это приводит к загрузке 64-битной версии [предназначенной] 32-битной DLL.

Конкретные зависимости для этого проекта: SDL.lib SDLmain.lib SDL_ttf.lib opengl32.lib glu32.lib wininet.lib

SDL и SDL_ttf только в 32-битной версии. Я предполагаю, что Visual Studio достаточно умен, чтобы получить файлы lib opengl и glu в \ syswow64, когда я запрашиваю приложение win32.

Может ли это быть из-за wininet? Или я ошибся?

Спасибо

1 Ответ

8 голосов
/ 21 марта 2011

Похоже, вы загружаете 64-битную DLL в 32-битный процесс или наоборот.Вот как я мог бы отследить нарушающую DLL.

Первый шаг - запустить dumpbin.exe (используйте командную строку VS, чтобы получить его в PATH) на исполняемом файле, чтобы убедиться, что архитектура - это то, что вам нужно.ожидайте: dumpbin.exe /headers foo.exe.В выводе заголовка файла вы должны увидеть значение "машина" "x86" или "x64".В дополнительном выводе заголовка вы должны увидеть магию «PE32» (для x86) или «PE32 +» (для x64).

Следующим шагом является запуск соответствующего обходчика зависимостей, доступного в www.dependencywalker.com , в зависимости от архитектуры (x86 или x64) исполняемого файла.Этот инструмент должен сообщить вам, находит ли он зависимость от путей поиска, отличных от той же архитектуры.

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

...