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

Сейчас я компилю библиотеку с ключом "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"
Спасибо!
  • Вопрос задан
  • 264 просмотра
Решения вопроса 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 (надеюсь, что нет, ибо это АД), то нет.
Ответ написан
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы