Не будет ли проблем при статической компиляции С++ библиотеки?

Сейчас я компилю библиотеку с ключом "Multi-threaded DLL (/MD)" - но у некоторых пользователей выдает ошибку.
Важно учесть, что программа, вернее плагин работает в среде 3ds Max.

Начал поставлять со своей библиотекой файлы msvcp110.dll и msvcr110.dll.
Просто ложу их в одну папку с моей библиотекой, но при этом возникла другая проблема - у некоторых пользователей стали медленно выполняться некоторые функции в 3ds max.
Насколько я понимаю, при вызове моей библиотеки подгружаются библиотеки msvc*110.dll и в дальнейшем они же используются 3ds max.

Возможное решение - компиляция с ключом "Multi-threaded (/MT)" - то есть эти библиотеки (msvc*110.dll и прочие ) будут встраиваться в мою dll.
Поможет ли это в моем случае, и будет ли 3ds max в этом случае подгружать "правильные" библиотеки, игнорируя встроенные в мою библиотеку ?
Нужно ли выставлять опцию "Use of MFC" в "Use MFC in a Static Library"
Спасибо!
  • Вопрос задан
  • 266 просмотров
Решения вопроса 1
Nipheris
@Nipheris Куратор тега C++
Если вкомпилите райнтам статически - по идее проблем быть не должно, т.к. у вас будет свой набор функций, не пересекающийся с тем, что загружаются 3dmax. Он просто не будет "видеть" вашу копию рантайм-библиотек, т.к. они будут монолитом с вашим плагином.

Если вы уверены, что дело в конфликте библиотек (в чем еще нужно убедиться - можно посмотреть, какие модули загружены 3dmax-ом, когда работает ваш плагин с помощью Process Explorer - по идее должны быть загружены отдельно и его библиотеки, и ваши, который лежат рядом с плагином), то можно попытаться ставить райнтам более серьезным способом - с помощью пакета установки. Если у вашего плагина уже есть инсталлер, тогда в него нужно интегрировать redistributable-инсталлер рантайма, если нет - тогда пользователям придется запускать установку самим. Плюс этого способа - операционка должна сама разрулить потенциальные конфликты (side-by-side, все дела).

И все-таки, проверьте, действительно ли ваши библиотеки "подменяют" 3d-максовские и отличаются ли они вообще друг от друга. У рантайма 2012-й студии вроде не так уж много версий есть на свете (MS довольно быстро выпустили 2013-ю и подняли версию vc++).
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
Нужно ли выставлять опцию "Use of MFC" в "Use MFC in a Static Library"


Если вы не используете MFC (надеюсь, что нет, ибо это АД), то нет.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы