В настоящее время я предпочитаю среду C ++ - бесплатную и в значительной степени превосходную версию Microsoft Visual Studio 2005 Express. Время от времени я отправлял другим людям файлы с расширением .exe, что давало хорошие результаты. Однако недавно я сделал тревожное открытие, что приятные результаты были основаны на большем удаче, чем мне хотелось бы. Попытка запустить одну из этих программ на старом (год выпуска 2001 г., не обновлялось тщательно) XP не дала мне ничего, кроме неприятного сообщения «Система не может запустить x.exe» (или аналогичного).
Некоторые поисковые запросы показали, что с помощью этого набора инструментов даже указание статической компоновки приводит к простому hello-world.exe, который фактически полагается на дополнительные файлы .dll (msvcm80.dll и т. Д.). Невероятно продуманная система схемы версий (кто-нибудь из файлов манифеста?) Не позволит запускать .exe без точно нужных версий .dll. Я не хочу и не нуждаюсь в этом, мне просто нужен старомодный автономный .exe, который ничего не делает, кроме операций Win32 с наименьшим общим знаменателем и работает на любой старой ОС Win32.
Кто-нибудь знает, можно ли делать то, что я хочу, с моим существующим набором инструментов?
Спасибо.
источник
error LNK2038: mismatch detected for 'RuntimeLibrary': value 'MD_DynamicRelease' doesn't match value 'MT_StaticRelease'
. Есть ли еще где-нибудь изменить тип сборки? Я создаю приложение wxWigets, очень похожее на @BillForster. Так что мне придется перестраивать wxWidgets? Как я могу это сделать?Мой опыт работы с Visual Studio 2010 показывает, что нужно внести два изменения, чтобы не использовать библиотеки DLL. На странице свойств проекта (щелкните правой кнопкой мыши имя проекта в окне обозревателя решений):
В разделе «Свойства конфигурации» -> «Общие» измените значение поля «Использование MFC» на «Использовать MFC в статической библиотеке».
В разделе «Свойства конфигурации» -> «C / C ++» -> «Генерация кода» измените значение поля «Библиотека времени выполнения» на «Многопоточность (/ MT)».
Не знаю, зачем нужны оба. Я использовал это, чтобы удалить зависимость от glut32.dll.
Добавлено позже: при внесении этих изменений в конфигурации вы должны внести их в «Все конфигурации» - вы можете выбрать это в верхней части окна свойств. Если вы внесете изменения только в конфигурацию отладки, они не будут применяться к конфигурации выпуска, и наоборот.
источник
У меня была такая же проблема с зависимостями, и я также знаю, что вы можете включить библиотеки DLL VS 8.0 (только выпуск! Не отладка! --- и ваша программа тоже должна быть выпущена) в папку с соответствующим именем в папке родительская папка с вашим .exe:
Как: Развернуть с помощью XCopy (MSDN)
Также обратите внимание, что все гарантированно пойдет наперекосяк, если вам нужно иметь код C ++ и C в одном и том же статически связанном .exe, потому что вы получите конфликты компоновщика, которые можно разрешить только путем игнорирования правильного libXXX.lib и последующего динамического связывания (DLL) .
Наконец, с другим набором инструментов (VC ++ 6.0) все «просто работает», поскольку в Windows 2000 и выше установлены правильные библиотеки DLL.
источник
Что касается ответа Джареда, то наличие Windows 2000 или выше не обязательно решит проблему. Ответ Роба работает, однако возможно, что это исправление вызывает проблемы с безопасностью, поскольку обновления Windows не смогут исправлять приложения, созданные как таковые.
В другом посте Ник Геррера предлагает упаковать распространяемый пакет среды выполнения Visual C ++ с вашими приложениями, которые устанавливаются быстро и не зависят от Visual Studio.
источник