У нас есть проект, который является исполняемым файлом, который загружает файлы DLL во время выполнения в виде плагинов.DLL-ссылка на статические библиотеки
Мы пытаемся создать новый подключаемый модуль, в котором есть много зависимостей между библиотеками, и некоторые из этих зависимостей - это одна и та же библиотека, но разные версии, к которым подключаются другие плагины.
Поскольку библиотеки зависят от разных плагинов в разных версиях, я хотел бы статически связывать/строить любые зависимости в новом плагине - таким образом они не могут конфликтовать со старыми зависимостями плагина. Насколько я знаю, ничто в зависимостях плагина не нужно экспортировать, они просто используются плагином.
Возможно ли это?
Я попытался создать все статические библиотеки в визуальной студии как статические библиотеки с временем выполнения, установленным в многопоточную DLL с флагом/MD, но когда я пытаюсь построить dynamiclibB.dll, я получаю ошибки компоновщика. Если я устанавливаю dynamiclibB для сборки как статической библиотеки, он не имеет ошибок компоновщика.
Я еще не пробовал связывать newplugin.dll со статической библиотекой версии dynamiclibB, но я думаю, что у меня точно такая же ситуация, поэтому я не вижу причин, почему она будет работать там, где она не будет на одном уровне вниз ,
Я не хочу строить dynamiclibB как статическую библиотеку в любом случае, так как было бы хорошо иметь возможность обновлять newplugin.dll без включения dynamiclibB.dll, если он не был изменен, как и в, чтобы отделить обновления. Эта линия рассуждений подсказывает, что я должен иметь .dll для всего, но конфликты версий беспокоят меня, я думаю.
Я не могу строить плагины как статические библиотеки, так как они должны быть загружены во время выполнения.
Абсолютно все в настоящее время строится в режиме выпуска, чтобы избежать этого осложнения.
Что мне не хватает?
Попытка диаграммы, которые могли бы помочь разобраться в ситуации:
program.exe
|
________________
| |
oldplugin.dll newplugin.dll
| |
dynamiclibA.dll dynamiclibB.dll
|
_________________________
| | |
staticlibA.lib slibC.lib slibD.lib
Update: Предоставление больше информации теперь, когда я знаю, что происходит, и знаю, что более конкретные детали на самом деле являются актуальными. Итак, библиотека A, представленная dynamiclibA и staticlibA, была zlib. Библиотека, которую мы собирали (dynamiclibB) для использования в newplugin, была PoDoFo. сообщения об ошибках, которые мы получили, были:
Error 19 error LNK2001: unresolved external symbol
_deflateInit_ E:\Work\podofo_bin\src\PdfFiltersPrivate.obj podofo_shared Error 20 error LNK2001: unresolved external symbol
_inflateEnd E:\Work\podofo_bin\src\PdfFiltersPrivate.obj podofo_shared Error 21 error LNK2001: unresolved external symbol
_inflateEnd E:\Work\podofo_bin\src\libpng16.lib(pngread.obj) podofo_shared Error 22 error LNK2001: unresolved external symbol
_deflate E:\Work\podofo_bin\src\PdfFiltersPrivate.obj podofo_shared Error 23 error LNK2001: unresolved external symbol
_deflate E:\Work\podofo_bin\src\libpng16.lib(pngwutil.obj) podofo_shared Error 24 error LNK2001: unresolved external symbol
_deflateEnd E:\Work\podofo_bin\src\PdfFiltersPrivate.obj podofo_shared Error 25 error LNK2001: unresolved external symbol
_deflateEnd E:\Work\podofo_bin\src\libpng16.lib(pngwrite.obj) podofo_shared Error 26 error LNK2001: unresolved external symbol
_inflateInit_ E:\Work\podofo_bin\src\PdfFiltersPrivate.obj podofo_shared Error 27 error LNK2001: unresolved external symbol
_inflateInit_ E:\Work\podofo_bin\src\libpng16.lib(pngrutil.obj) podofo_shared Error 28 error LNK2001: unresolved external symbol
_inflate E:\Work\podofo_bin\src\PdfFiltersPrivate.obj podofo_shared Error 29 error LNK2001: unresolved external symbol
_inflate E:\Work\podofo_bin\src\libpng16.lib(pngrutil.obj) podofo_shared
Положив остальное в ответ.
Вопросы: «некоторые из этих зависимостей - это одна и та же библиотека, но разные версии, к которым подключаются другие плагины» - это означает, что old/newplugin.dll - это просто разные версии, не так ли? Это также относится к dynamiclibA/B.dll? Если да, могу ли я предположить, что старые + A и новые + B пары были построены с различными версиями MSVC? Кроме того, какие ошибки компоновщика вы получаете для dynamiclibB? – frasnian
Старые и новые плагины - совершенно несвязанные плагины, которые в конечном итоге имеют одинаковые зависимости. –
Все - msvc10 –