我正在编写一个使用英特尔TBB库的应用程序,以及一个名为Maplink的公司的API,该公司也使用TBB。问题是我的应用程序和Maplink API都想从包含我的应用程序二进制文件的目录中加载TBB.dll。 Maplink提供的TBB.dll版本与我的应用程序所需的版本不同,它们不能同时存在于应用程序的可执行文件目录中。除了将TBB静态链接到我的应用程序之外,我是否有任何其他选项,以便它不会尝试加载Maplink API正在使用的错误版本的TBB.dll?
答案 0 :(得分:3)
在现实世界中,混合同一DLL的不同版本是个坏主意。您应该尝试让您的平台保持一致。它没有被称为包地狱。
话虽如此,如果它同时允许多个版本,则非常符合TBB.dll
。您可能能够将您的代码与您的TBB版本静态链接,但在这样做时,您需要确保静态链接的符号不是动态可见的(编译器集合依赖的链接器选项)。您拥有的依赖于TBB的代码也可能必须在包含链接到maplink的链接器步骤中链接。并且需要链接应用程序而不重新链接TBB.dll
。
至少这是它如何适用于Linux中的so
文件。
答案 1 :(得分:2)
如评论中所述,您可以将较新版本的tbb.dll放入应用程序目录中,它应该适用于应用程序和它使用的第三方库。例如,最新版本 - TBB 4.2 - 与旧版本二进制兼容,返回TBB 2.0。