x86 AMD64 DLL проблема - Visual Studio 2005? - PullRequest
0 голосов
/ 16 августа 2010

Я получаю сообщение об ошибке «Приложение не удалось правильно запустить (0xc000007b). Нажмите кнопку ОК, чтобы закрыть приложение».Когда я пытаюсь запустить программу, скомпилированную с Visual Studio 2005.

Когда я запускаю программу Windows «зависит» от этого исполняемого файла, я вижу ТОННУ DLL, которые перечислены как «x86» dll.Похоже, что это все библиотеки DLL операционной системы (находятся в каталоге c: \ windows \ system32).«Зависит» перечисляет их как красный, где он описывает архитектуру, так как я делаю двоичный файл AMD64.Некоторые из библиотек DLL (библиотеки QT, которые я скомпилировал из исходного кода) указаны как AMD64.

Я попытался добавить "c: \ windows \ SysWOW64" к моему пути перед "c: \ windows \ system32" и пересобрать мое приложение.Для меня это похоже на то, где живут 64-битные версии этих DLL.Это все еще получает то же самое сообщение об ошибке.Мой проект настроен для сборки как проект x64.В моем проекте -> свойства -> компоновщик -> расширенный -> целевой компьютер, я пробовал и «MachineX64» и «не установлено».Обе эти настройки приводят к одному и тому же сообщению об ошибке во время выполнения, когда я пытаюсь запустить свой исполняемый файл.

Я не очень хорошо разбираюсь в создании программного обеспечения в среде Windows.Большая часть моего опыта исходит от Linux.Мне кажется, это проблема архитектуры DLL, но я не уверен.Google это сообщение об ошибке не предоставило мне много полезной информации.Любая помощь будет высоко ценится.Я только начал новую работу, и, похоже, у меня возникло много проблем, когда дело доходит до запуска нашего кода ...

Большое спасибо, что нашли время прочитать мой вопрос,

-Брайан Дж. Стинар-

Прежде всего, большое спасибо за предоставленную мне обратную связь.

'set' предоставляет мне следующую информацию, которая, я считаю, поможет ответить на некоторые ваши вопросы.Поскольку я не очень хорошо знаком с системным администрированием Windows, пожалуйста, дайте мне знать, есть ли какие-либо другие команды, которые, по вашему мнению, я должен выполнить, чтобы предоставить вам более полезную информацию.Вывод, который я считаю релевантным из 'set', приведен ниже:

LIBVERSION = win64

PROCESSOR_ARCHITECTURE = AMD64

PROCESSOR_IDENTIFIER = Intel64, семейство 6, модель 26, шаг 5, GenuineIntel

PROCESSOR_LEVEL = 6

PROCESSOR_REVISION = 1a05

В свойствах моей системы я обнаружил следующие значения, которые, как мне кажется, помогут прояснить мою ситуацию:

Windows 7

Процессор: Intel (R) Xeon (R) CPU W3530 @ 2,80 ГГц 2,79 ГГц

Тип системы: 64-разрядная операционная система

Я не совсем уверен, что яЯ понимаю разницу между x64 и ia64, но насколько я понимаю, ia64 для процессоров класса Itanium, которых у меня нет.Я считаю, что у меня есть процессор x64.Это согласно чтению поста на

http://mikedimmick.blogspot.com/2006/03/whats-difference-between-x64-and-ia-64.html

Процессоры Xeon попадают в категорию x64.Я не уверен, понимаю ли я, как AMD64 вписывается в это все же.

Должны ли я иметь библиотеки DLL AMD64, на которые я ссылаюсь, и должна ли моя программа быть в списке процессоров типа AMD64, если у меня действительно есть чип Intel Xeon?

Еще раз спасибо за вашу помощь,

-Брайан Дж. Стинар-

Ответы [ 2 ]

1 голос
/ 16 августа 2010

SysWOW64 - это место, где 32-разрядные библиотеки DLL находятся в 64-разрядной системе.(«WOW» - это «Windows On Windows», например, 32-разрядные библиотеки DLL для Windows на 64-разрядных окнах, поэтому SysWOW64 - это «папка Sys» для Windows в Windows64).обнаруживает 32-разрядное изображение в 64-разрядной установке.

Я согласен с Rup - звучит так, будто ваше изображение построено для архитектуры, отличной от вашей.

0 голосов
/ 25 августа 2010

Было две DLL, которые были неправильными. Это были:

libifcoremdd.dll libmmdd.dll

Я работал с коллегой по этой проблеме сегодня, и он скопировал их из места, которое, как он знал, было хорошо. Когда я раньше работал с другим коллегой, мы скопировали их из другого места, что оказалось неверным.

Кроме того, если у кого-то есть аналогичные проблемы,

dumpbin /headers DLLName 

даст много полезной информации об используемых вами DLL. Я не совсем уверен, в чем разница между этими разными DLL (я переписал старые, прежде чем их проверять). Если я сделаю дополнительный анализ по этому вопросу, я опубликую результаты здесь. Я подозреваю, что DLL были x86 или ia64, а не x64, как мне нужно.

Какое наилучшее решение для упаковки и перемещения таких библиотек DLL в среде Windows? Просто копирование их в каталог по моему пути не кажется лучшим решением.

Большое спасибо всем!

-Брайан Дж. Стинар-

brian-stinar.blogspot.com

...