Сборка BSA-Analytics под Windows 10

Недавно выдалось свободное время, начал разбираться с частью проблем в BSA-Analytics. На основной рабочей машине перестал работать функционал подгрузки и обработки длинных данных. Исходные данные:

  1. 2 года назад все стабильно работало
  2. Под линуксом все и сейчас стабильно работает
  3. Под виртуалкой и под линуксом все работает
  4. Под чужой Windows 7 все работает
  5. Версия полугодовалой давности везде работает
  6. Никаких изменений за последние полгода, которые могли бы сказаться, не было. Тем не менее, все сломалось
  7. На рабочем компе Windows 8.1, которая затеяла массивное обновление самой себя некоторое время назад

Когда долгое время что-то не трогаешь, все резко выходит из-под контроля. Началось все с того что я узнал, что под виртуалкой у меня не работает дебаг. С учетом того как я в свое время долго и упорно настраивал полноценную x64 сборку (а это было года 3-4 назад), шансов все починить было немного. Решил поставить Qt заново, причем сразу на рабочей машине. Так как дело проходило в обсерватории, то и с интернетом там были соответствующие проблемы. Поставить Qt оказалось неожиданно сложной задачей. В контексте Qt 5.5+ mingw x64 я ее решить вообще не смог. Решил попробовать провернуть все уже с нормальным интернетом под виртуалкой Windows 10. Поставил Qt 5.11 + msvc. И тут у меня заработал дебаггер. Часов 16 подготовки, и я нахожу баг за 10 минут.

Дойти сразу до точки падения правда не удалось. Потому что от смены компилятора у меня изменилось начал по-другому проявляться undefined behaviour в ряде мест, их всех пришлось фиксить.

Ну а баг оказался достаточно обычным (код сильно упрощен):

    double *data = new double[1000];
    fillData(data);
    delete data;
    return data[0];

Ничего, всегда работало. Предлагаю виновной назначить все-таки чертову восьмерку, потому что именно у нее планировщик памяти конфисковывал у меня необходимые мне страницы памяти, и только после этого случался SEGFAULT.

Моя виртуалка с семеркой очень старая, я думаю ей уже лет 8. Решил за компанию перевести сборку под десятку. Пришлось заново разбираться с набором библиотек, оставил с программой только базовые библиотеки Qt. Все остальное теперь пафосно качается и ставится из интернета. Все по канонам винды. И инсталлятор теперь весит в 2 раза меньше.

Инсталлятор твердо обозначает свои намерения

Инсталлятор модно качает левые exe файлы из интернета. Перед запуском рекомендуем вырубить антивирус

Уже впоследствии узнал из-за чего были такие проблемы с инсталляцией Qt. Все дело в том, что библиотеки, содержащие наборы функций (Си) стандартизированны. А вот библиотеки, содержащие классы (C++) не стандартизированны. (Речь идет о винде, в линуксе между gcc и clang, например, таких проблем, нет). К чему это приводит? Это приводит к тому, что если ты собрал либу каким-то компилятором, то свой проект, юзающий эту библиотеку надо собирать тем же компилятором, или об успешной линковке придется забыть. Все продумано. Инженеры Microsoft не зря свой хлеб едят. Таким образом, если Qt был собран msvc2017, то проект надо будет собирать только msvc2017. Из-за этого Qt распространяется в различных паках на разных компиляторах. И смешивать ничего нельзя. А mingw, чертов, не обладает нормальной x64 версией, только каким-то форком, короче надо было смириться и сразу юзать msvc.

Дебильные проблемы, но они многое мне объяснили. Полное описание проблемы от одного из разработчиков Windows можно посмотреть в одном из вопросов к докладу об устройстве dll: Доклад о dll

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *