Сторонней библиотеке требуется другая версия той же DLL, что и мое приложение

Я пишу приложение, которое использует как библиотеку Intel TBB, так и API от компании Maplink, которая также использует TBB. Проблема заключается в том, что и мое приложение, и API-интерфейс Maplink хотят загрузить TBB.dll из каталога, содержащего двоичный файл моего приложения. Версия TBB.dll, предоставляемая Maplink с их API, отличается от той, которая требуется моему приложению, и они не могут сосуществовать в каталоге исполняемых файлов приложения. Есть ли здесь какой-либо вариант, кроме статической привязки TBB к моему приложению, чтобы он не пытался загрузить неправильную версию TBB.dll, которую использует API-интерфейс Maplink?

1

Решение

Как упоминалось в комментариях, вы можете поместить более новую версию tbb.dll в каталог приложения, и он должен работать должным образом как для приложения, так и для сторонней библиотеки, которую он использует. Например, последняя версия — TBB 4.2 — двоично совместима со старыми версиями до TBB 2.0.

2

Другие решения

В реальном мире плохая идея смешивать разные версии одной и той же DLL. Вы должны действительно попытаться привести свою платформу в соответствие. Это не называется пакетом ада даром.

Это, как говорится, очень многое до TBB.dll если он допускает несколько версий одновременно. Возможно, вы сможете статически связать ваш код с вашей версией TBB, но при этом вам нужно будет убедиться, что статически связанные символы не видны динамически (опция компоновщика, зависящая от коллекции компиляторов). Код, который у вас есть, зависит от TBB, вероятно, также должен быть связан в отдельном шаге компоновщика от того, который включает в себя ссылку на maplink. И приложение должно быть связано без повторного связывания с TBB.dll,

По крайней мере, так это может работать so файлы в линуксе.

3

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector