1

我正在编写一个使用 Intel 的 TBB 库和一个名为 Maplink 的公司的 API 的应用程序,该公司也使用 TBB。问题是我的应用程序和 Maplink API 都想从包含我的应用程序二进制文件的目录中加载 TBB.dll。Maplink 通过其 API 提供的 TBB.dll 版本与我的应用程序所需的版本不同,并且它们不能同时存在于应用程序的可执行目录中。除了将 TBB 静态链接到我的应用程序以便它不会尝试加载 Maplink API 正在使用的错误版本的 TBB.dll 之外,我还有其他选择吗?

4

2 回答 2

3

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

话虽如此,这在很大程度上取决于TBB.dll它是否允许同时支持多个版本。您可能能够将您的代码静态链接到您的 TBB 版本,但在这样做时,您需要确保静态链接的符号不是动态可见的(依赖于编译器集合的链接器选项)。您拥有的依赖于 TBB 的代码可能还必须在一个单独的链接器步骤中链接,而不是包含链接到 maplink 的链接器步骤。并且应用程序将需要链接而不重新链接到TBB.dll.

至少这就是它so在 Linux 中对文件的工作方式。

于 2013-11-27T21:57:49.413 回答
2

正如评论中提到的,您可以将较新版本的 tbb.dll 放入您的应用程序目录中,它应该适用于应用程序和它使用的第 3 方库。例如,最新版本 - TBB 4.2 - 二进制兼容旧版本回 TBB 2.0。

于 2013-11-29T09:08:02.320 回答