2015-01-22 3 views
0

Это немного раздражает.C++ Связывание статических библиотек с динамической библиотекой

У меня есть проект, который полностью динамически связан, но я хочу использовать библиотеку, которая, по-видимому, предназначена только для статической привязки с использованием флагов/MT. Возможно ли построить отдельную dll для ссылки на статические библиотеки, а затем ссылку на это в моем проекте?

Приносим извинения за поспешное объяснение, я довольно устал.

В библиотеке находится библиотека физики пули.

Редактировать: Ну, с большим количеством поисковых запросов, похоже, что скомпилированная версия/MD/MDd, , хотя я не уверен, где она находится.

Edit (для тех, кто заинтересован): Согласно этой страницы: http://www.bulletphysics.org/Bullet/phpBB3/viewtopic.php?f=9&t=3846

«Если весь ваш двигатель собран с флагом/MD, то вы бы использовать„освободить DLL“версию пули Вы должны. не смешивать библиотеки, скомпилированные с/MD, с компилируемыми с/MT. Это основное отличие. Не существует отдельных файлов DLL (DLL) для пули ».

Редактировать: И если я построю его с использованием библиотеки времени выполнения MSVC, то это не сработает.

Короче говоря, я понятия не имею, что делать.

Он, что я делаю:

Построение всей библиотеки в CMake, с помощью Visual Studio 12, 2013 компилятор. Затем строим проект, построенный cmake, чтобы построить все необходимые проекты.

Это инструкции. Here

Последнее редактирование: Спасибо вам большое за помощь! Мне удалось построить его в конце концов

Извините за любые орфографические ошибки, я был очень усталым в то время: 3

+0

Я считаю, что ответ отрицательный, потому что время выполнения не соответствует.Я думаю, что в худшем случае вы можете получить поврежденную память, и, в лучшем случае, сбой канала. –

+0

Надеюсь, я ошибаюсь, так как мне было бы интересно, если бы я мог это сделать, а также узнать об этом больше –

+0

Это действительно очень неприятно, и на самом деле интернет не содержит информации по этой теме, включая их форумы , – ComedyGold

ответ

1

Короткий ответ, да.

Хотя вы можете просто связать динамические библиотеки с ней, есть сценарии, где это может вызвать серьезные проблемы, в зависимости от того, как была написана библиотека (информация о состоянии и т. Д.).

Хотя это больше работает, DLL-обертка, вероятно, является самым безопасным способом. Однако это компенсируется тем фактом, что вам нужно только обернуть функции, фактически вызванные из различных компонентов вашего приложения, а не весь API, предоставляемый библиотекой. Кроме того, вам нужно будет иметь какое-то небольшое переименование функций, которые вы на самом деле обертываете, чтобы предотвратить неоднозначность.

On edit: Просто взглянул на библиотеку физики пули, так как я лично не знаком с ней и интересовался вашими вариантами после того, как я изначально ответил. Если они явно не поддерживают динамические сборки для библиотеки, я думаю, что упаковка любых функций, которые вы фактически используете, определенно будет безопаснее. Это отстой. Надеюсь, что это не слишком большое поперечное сечение.

+0

Проблема явно заключается в том, что библиотека пули скомпилирована с флагами/MT, и, насколько я понимаю, вы не можете связываться с двумя режимами работы. – ComedyGold

+0

Я тебе не завидую. – frasnian

+0

После ваших правлений, ОП, этот парень прав –

Смежные вопросы