2013-11-27 2 views
1

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

+5

Не работает ли более новая версия tbb.dll для обоих? – egur

+0

Intel не хочет решить эту проблему (http://software.intel.com/en-us/forums/topic/286809), с которой вы имеете дело. –

ответ

2

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

3

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

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

По крайней мере, так оно и должно работать для so файлов в Linux.

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