2013-11-27 62 views
1

我正在编写一个应用程序,该应用程序既使用英特尔的TBB库,也使用同样使用TBB的Maplink公司的API。问题是我的应用程序和Maplink API都想从包含我的应用程序二进制文件的目录加载TBB.dll。 Maplink提供的TBB.dll的版本与我的应用程序需要的版本不同,它们不能同时存在于应用程序的可执行目录中。除了将TBB静态链接到我的应用程序中以外,我是否有任何选项,以便它不会尝试加载Maplink API正在使用的TBB.dll的错误版本?第三方库需要我的应用程序具有相同DLL的不同版本

+5

tbb.dll的较新版本不适用于两者吗? – egur

+0

英特尔确实[不想解决这个问题](http://software.intel.com/zh-cn/forums/topic/286809)它是你自己处理的。 –

回答

2

正如在评论中提到的那样,您可能会将新版本的tbb.dll放入您的应用程序目录,并且它应该适用于应用程序和它使用的第三方库。例如,最近的版本TBB 4.2与旧版本的TBB 2.0二进制兼容。

3

在现实世界中,混合使用同一个DLL的不同版本是一个坏主意。你应该真的尝试让你的平台对齐。它不被称为包裹地狱。

这就是说,它是非常高达TBB.dll,如果它允许一次多个版本。您可能能够将您的代码静态链接到您的TBB版本,但这样做时您需要确保静态链接的符号不是动态可见的(依赖于编译器集合的链接器选项)。您拥有的代码依赖于TBB,它必须也可以链接到包含链接到maplink的代码中。并且该应用程序将需要链接而不用重新链接TBB.dll

至少它是如何在Linux中工作的so文件。

相关问题