C ++ EXE, созданный в VC ++ 2008, работает на Windows 7, но не на XP - PullRequest
2 голосов
/ 01 ноября 2009

Я работаю над восстановлением старого проекта (который работает только с <5.1), который по сути компилирует PHP 5.3 в PE C ++ EXE. Я получил все, чтобы работать <em>действительно хорошо на нескольких компьютерах с Windows 7 с только 2 DLL и 1 EXE для большинства приложений! К сожалению, на XP я получаю:

приложение не удалось запустить из-за неправильной конфигурации приложения

Я установил распространяемый пакет Microsoft Visual C ++ 2008 безрезультатно. Я также скопировал msvcm90.dll, msvcr90.dll, msvcp90.dll в тот же каталог, что и exe. Это тоже не сработало.

Нужно ли мне просто скомпилировать проект для XP, чтобы он работал на XP?

Я действительно хорош в PHP, но C не моя сильная сторона, поэтому я предполагаю, что упустил что-то очевидное в компиляторе.

EDIT: Когда я компилирую только с многопоточностью (/ Mt), я получаю это:

MSVCRT.lib(MSVCR90.dll) : error LNK2005: _fflush already defined in 
LIBCMT.lib(fflush.obj)
MSVCRT.lib(MSVCR90.dll) : error LNK2005: _malloc already defined in LIBCMT.lib(malloc.obj)
MSVCRT.lib(MSVCR90.dll) : error LNK2005: _free already defined in LIBCMT.lib(free.obj)
LINK : warning LNK4098: defaultlib 'MSVCRT' conflicts with use of other libs; use /NODEFAULTLIB:library
out/console_debug.exe : fatal error LNK1169: one or more multiply defined symbols found

Ответы [ 4 ]

3 голосов
/ 01 ноября 2009

Попробуйте использовать Dependency Walker в XP, чтобы узнать, можете ли вы найти недостающие зависимости.

Также проверьте Event Viewer. И убедитесь, что вы создаете приложение в режиме Release.


Dependency Walker, показывающий зависимость от DWMAPI.DLL, часто является неправильным отчетом, который может быть вызван зависимостью от mshtml.dll в окне XP с IE7. Вы проверяли программу просмотра событий?

Опубликованные вами ошибки сборки предполагают, что вы ссылаетесь на библиотеки, которые НЕ собраны с флагом / MT. Убедитесь, что вы перестроили все в своем решении; ваши 2 DLL, .EXE и любые статические библиотеки с тем же флагом, если вы также владеете DLL.

2 голосов
/ 01 ноября 2009

Есть ли у вас файлы манифеста в каталоге вашего приложения? Я бы порекомендовал убедиться, что они есть, и правильно сослаться на места DLL. Взгляните на эту ссылку:

http://msdn.microsoft.com/en-us/library/ms235342(VS.80).aspx

1 голос
/ 01 ноября 2009

Пробовали ли вы Проект / Свойства / Свойства конфигурации / C / C ++ / Генерация кода / Библиотека времени выполнения -> Многопоточность (/ MT)?

0 голосов
/ 21 октября 2010

Попробуйте установить распространяемые файлы VC2008 на компьютер с XP.

...