Страницы

Поиск по вопросам

среда, 12 декабря 2018 г.

Сборка приложения для windows с использованием visual studio

Доброго времени суток!
Разрабатываю понемножку с использовванием visual studio(13), и постоянно мучит особенность сборки под винду, которая заключается в следующем: для корректной работы на другом компьютере необходимо ручками докладывать библиотеки, которые приложение просит на выходе. В то же время, когда приложение собирается в релизе и запускается, то студия автоматически подкадывает нужные библиотеки, что б приложение могло запуститься.
Что необходимо сделать для того что бы студия скопировала все необходимые для работы библиотеки в папку рядом с ехе-шником?


Ответ

Стандартно, в студии ничего подобного не предусмотрено. Предпологается, что разработчик сам знает какие библиотеки используются в его проекте и сам ими управляет.
Однако, есть библиотеки которые могут линковаться неявно, при этом способ линковки (статическая/динамическая) можно настраивать в параметрах проекта:
CRT - настраивается параметром "C/C++\Code Generation\Runtime Library", по-умолчанию включена динамическая линковка и именно из-за нее у новичков возникают проблемы при распространении ПО; если включить статическую линковку то DLL тянуть не потребуется. MFC - настраивается "General\Use of MFC", по-умолчанию не используется ATL - настраивается "General\Use of ATL", по-умолчанию не используется
Проблема в том, что на машине разработчика все эти библиотеки устанавливатся вместе со студией и поэтому ПО запускается из любого места. А вот на машине пользователя этих библиотек часто нет, от сюда у новичков и возникают проблемы. Проблема решается либо статической линковкой, либо установкой соответсвующих пакетов (редистов) нужных версий (ссылки успешно яндексятся на сайте Майкрософта)
Вторая проблема в том, что при автоматической загрузке DLL, требуется чтобы все библиотеки в пределах одного бинаря линковались одинаково. Это означает, например, что если QT слинковам с CRT динамически то и наш бинарь должен линковать CRT динамически. Это можно обойти, если применять не автоматическую а ручную загрузку DLL, но тогда гемор разрастется многократно. Проще немного увеличить инсталянт в размере, може мне поверить.

Комментариев нет:

Отправить комментарий