Доброго вам дня!
Розробляю потроху з іспользовваніем 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, але тоді гемор розростеться багаторазово. Простіше трохи збільшити інсталянт в розмірі, может мені повірити.