Хобрук: Ваш путь к мастерству в программировании

Visual Studio 2015 Win64 зависает во время сборки решения

Я пытаюсь создать некоторые сторонние библиотеки из исходного кода с помощью Visual Studio 2015. Я создаю файл решения с помощью cmake 3.2.3 и использую модуль ExternalProject_add. Ранее я успешно скомпилировал и построил этот код cmake в 32-битной Visual Studio 2012, но не в 64-битной.

Сейчас я пытаюсь собрать его в 64-битной Visual Studio 2015, и среда IDE необъяснимым образом зависает в процессе сборки как с отладочной, так и с выпускной сборкой. Иногда процессы сборки все еще выполняются, например cl.exe, но ничего не происходит, и мне приходится заходить в диспетчер задач и завершать все процессы, связанные со сборкой. Затем я пытаюсь собрать его снова, и иногда он строится успешно, а в других случаях возникает та же ошибка; зависание на разных строках кода в зависимости от того, как далеко он продвинулся в сборке.

У меня возникла такая же проблема с зависанием при попытке создать решение в 32-битной версии.

Я не уверен, есть ли проблема с моей установкой Visual Studio 2015 или проблема с моим кодом cmake, который вызывает это зависание. Я мало что знаю о cmake за пределами ExternalProject_add, поэтому любая помощь с cmake или Visual Studio очень ценится.

Вот внешний код проекта, который инициирует сборку:

include(ExternalProject)

ExternalProject_Add(${3rdPartyLibraryName}
    DOWNLOAD_DIR ${3rdParty_CacheDir}
    URL ${3rdPartyURL}
    SOURCE_DIR ${3rdPartySourceDir}
    TMP_DIR ${3rdPartySourceDir}/${3rdPartyLibraryName}
    BUILD_COMMAND nmake /f makefile.vc MSVC_VER=${MSVC_VERSION} WIN64=YES INCDIR=${CMAKE_SOURCE_DIR}/../3rdParty/${3rdPartyLibraryName}/test/include
    BINARY_DIR ${3rdPartySourceDir}
    CMAKE_ARGS
      -DCMAKE_INSTALL_PREFIX:string=${3rdPartySourceDir}
    INSTALL_COMMAND ""
)

Изменить

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


  • Не могли бы вы добавить минимальный, полный и проверяемый пример? Просто предполагаю - потому что причина может быть в чем угодно - я не думаю, что это особенно связано с CMake. Исходя из моего опыта, есть две возможные причины: 1. Недостаточно памяти/дискового пространства (например, сколько cl.exe процессов запущено, когда он зависает?) 2. Некоторые фоновые службы Visual Studio зависают с несколькими экземплярами VS. 11.05.2016
  • См., например. Почему msbuild и link.exe «зависают» во время build? или даже — как при использовании Jenkins — сборки Visual Studio, запущенные Jenkins сбой с фатальной ошибкой C1090, так как mspdbsrv.exe завершается. 11.05.2016
  • Спасибо за ссылки, Флориан, я ценю помощь. Извините, что не опубликовал пример раньше, так как я новичок в переполнении стека. Нет экземпляров cl.exe, один экземпляр MSBuild.exe и два экземпляра nmake, когда сборка зависает. Также сторонняя библиотека, которую я пытаюсь создать, — это gdal, если это поможет. 11.05.2016
  • Это почти всегда шаткая проблема защиты от вредоносных программ. Отключите его и повторите попытку. Особенно Avast стал вирусным за последние несколько месяцев, избавьтесь от него как можно скорее. 11.05.2016
  • Спасибо за предложение Ганс. В настоящее время я использую McAfee в качестве антивирусного сканера, хотя я работаю на компьютере компании и не имею возможности отключить сканирование вирусов и вредоносных программ. Лично у меня есть сомнения, что это антивирусный сканер, потому что я ранее построил его в VS 2012 с включенным сканером. Все равно буду иметь в виду. 11.05.2016

Ответы:


1

Потребовалось некоторое время и некоторые исследования, но я думаю, что воспроизвел вашу проблему и нашел решение. Я обнаружил, что cl.exe может зависнуть, но на самом деле зависал процесс cvtres.exe. Когда я убивал этот процесс, компиляция продолжалась. Кажется, есть известная ошибка, которую исправляет KB3118401. Я установил этот патч, и с тех пор у меня не было этой проблемы. Надеюсь это поможет!

https://www.microsoft.com/en-us/download/details.aspx?id=51161

10.06.2016
  • Для меня это не решение, так как у меня Win10, и проблема возникает случайным образом, когда процесс сборки завершается. 14.11.2016
  • Я бы поставил два плюса, если бы мог. Ошибка так расстроила! 12.07.2017
  • Новые материалы

    Решения DBA Metrix
    DBA Metrix Solutions предоставляет удаленного администратора базы данных (DBA), который несет ответственность за внедрение, обслуживание, настройку, восстановление базы данных, а также другие..

    Начало работы с Блум
    Обзор и Codelab для генерации текста с помощью Bloom Оглавление Что такое Блум? Некоторые предостережения Настройка среды Скачивание предварительно обученного токенизатора и модели..

    Создание кнопочного меню с использованием HTML, CSS и JavaScript
    Вы будете создавать кнопочное меню, которое имеет состояние наведения, а также позволяет вам выбирать кнопку при нажатии на нее. Финальный проект можно увидеть в этом Codepen . Шаг 1..

    Внедрите OAuth в свои веб-приложения для повышения безопасности
    OAuth — это широко распространенный стандарт авторизации, который позволяет приложениям получать доступ к ресурсам от имени пользователя, не раскрывая его пароль. Это позволяет пользователям..

    Классы в JavaScript
    class является образцом java Script Object. Конструкция «class» позволяет определять классы на основе прототипов с чистым, красивым синтаксисом. // define class Human class Human {..

    Как свинг-трейдеры могут использовать ИИ для больших выигрышей
    По мере того как все больше и больше профессиональных трейдеров и активных розничных трейдеров узнают о возможностях, которые предоставляет искусственный интеллект и машинное обучение для улучшения..

    Как построить любой стол
    Я разработчик программного обеспечения. Я люблю делать вещи и всегда любил. Для меня программирование всегда было способом создавать вещи, используя только компьютер и мое воображение...