Приложение Windows 10 с динамически связанным VC ++ не запускается даже после установки распространяемого VC ++ 2017 - PullRequest
0 голосов
/ 06 декабря 2018

В настоящее время мы проводим бета-тестирование приложения Windows, созданного с использованием новейшей Visual Studio на C ++ и работающего на Windows 10. Приложение динамически связывает библиотеки VC ++ (статическое связывание для нас не вариант).

На 75% машин наших тестировщиков (включая все наши машины разработки) приложение работает сразу после установки, но с некоторыми другими оно не запускается и завершается сбоем (предположительно) в процессе загрузки динамических системных библиотек (поскольку он не вызывает никаких исключений, которые могли бы записать мини-дамп, как при ошибках времени выполнения).

  1. У некоторых из этих пользователей были ошибки об отсутствующих библиотеках времени выполнения, которые были устранены после установки последней распространяемой версии VC ++ 2017Однако приложение все равно не запускается.
  2. Один пользователь также проверил зависимости библиотеки с помощью инструмента Зависимости (https://github.com/lucasg/Dependencies),, но его результаты не показывают ничего странного - нет очевидной разницы между выводом нарабочая машина и его собственный.Есть несколько вопросительных знаков (см. Скриншот: отсутствующие модули, как показано в Зависимости ) рядом с некоторыми подзависимостями UCRT, но они также присутствуют на рабочих машинах, поэтому я предполагаю, что они являются ложными срабатываниями.
  3. Я также пытался развернуть соответствующие 40 библиотек UCRT и VC ++ в качестве локального развертывания приложения рядом с исполняемым файлом, но он все равно не открывался на затронутых машинах (возможно, я пропустил некоторые соответствующие, или на них все еще ссылалисьиз папки System32)

Как бы вы отладили такую ​​проблему, если мы не можем воспроизвести ее локально (она работает из коробки на двух совершенно новых устройствах со свежей Windows10 установить и без среды сборки) и очень мало информации о том, что может быть не так с вызовами библиотеки?

1 Ответ

0 голосов
/ 06 декабря 2018

c000001d - недопустимый код исключения инструкций.

Либо вы ориентируетесь на наборы инструкций, такие как AVX2 или SSE4.1, которые не поддерживает ЦП клиента, либо испорчен исполняемый файл (например, загружен в текстовом режиме).вместо двоичного режима).

Для лучшей переносимости не указывайте /arch:AVX или /arch:AVX2 при компиляции с VC ++.Затем компилятор нацелится на базовый набор команд, доступный для данной архитектуры (x86 или x86_64 с SSE2).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...