Я пишу приложение, которое использует как библиотеку Intel TBB, так и API от компании Maplink, которая также использует TBB. Проблема заключается в том, что и мое приложение, и API-интерфейс Maplink хотят загрузить TBB.dll из каталога, содержащего двоичный файл моего приложения. Версия TBB.dll, предоставляемая Maplink с их API, отличается от той, которая требуется моему приложению, и они не могут сосуществовать в каталоге исполняемых файлов приложения. Есть ли здесь какой-либо вариант, кроме статической привязки TBB к моему приложению, чтобы он не пытался загрузить неправильную версию TBB.dll, которую использует API-интерфейс Maplink?
Как упоминалось в комментариях, вы можете поместить более новую версию tbb.dll в каталог приложения, и он должен работать должным образом как для приложения, так и для сторонней библиотеки, которую он использует. Например, последняя версия — TBB 4.2 — двоично совместима со старыми версиями до TBB 2.0.
В реальном мире плохая идея смешивать разные версии одной и той же DLL. Вы должны действительно попытаться привести свою платформу в соответствие. Это не называется пакетом ада даром.
Это, как говорится, очень многое до TBB.dll
если он допускает несколько версий одновременно. Возможно, вы сможете статически связать ваш код с вашей версией TBB, но при этом вам нужно будет убедиться, что статически связанные символы не видны динамически (опция компоновщика, зависящая от коллекции компиляторов). Код, который у вас есть, зависит от TBB, вероятно, также должен быть связан в отдельном шаге компоновщика от того, который включает в себя ссылку на maplink. И приложение должно быть связано без повторного связывания с TBB.dll
,
По крайней мере, так это может работать so
файлы в линуксе.