C++ 第三方库需要我的应用程序使用的同一DLL的不同版本

C++ 第三方库需要我的应用程序使用的同一DLL的不同版本,c++,dll,conflict,tbb,name-conflict,C++,Dll,Conflict,Tbb,Name Conflict,我正在编写一个应用程序,它既使用Intel的TBB库,也使用一家名为Maplink的公司的API,该公司也使用TBB。问题是我的应用程序和Maplink API都希望从包含应用程序二进制文件的目录中加载TBB.dll。Maplink随其API提供的TBB.dll版本不同于我的应用程序所需的版本,并且它们不能同时存在于应用程序的可执行目录中。除了静态地将TBB链接到我的应用程序中,以便它不会尝试加载Maplink API使用的TBB.dll的错误版本之外,我还有其他选择吗?在现实世界中,混合使用同

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

在现实世界中,混合使用同一dll的不同版本是一个坏主意。你真的应该试着让你的平台对齐。这并不是无缘无故的包裹地狱

这就是说,如果TBB.dll同时允许多个版本,那么它将完全取决于TBB.dll。您可能能够根据TBB版本对代码进行静态链接,但在执行此操作时,您需要确保静态链接的in符号在依赖于编译器集合的链接器选项中不动态可见。您拥有的依赖于TBB的代码可能也必须在包含链接到maplink的链接器步骤之外的单独链接器步骤中链接。并且需要链接应用程序,而无需重新链接TBB.dll


至少这是它在Linux中处理so文件的方式。

在现实世界中,混合使用同一DLL的不同版本是个坏主意。你真的应该试着让你的平台对齐。这并不是无缘无故的包裹地狱

这就是说,如果TBB.dll同时允许多个版本,那么它将完全取决于TBB.dll。您可能能够根据TBB版本对代码进行静态链接,但在执行此操作时,您需要确保静态链接的in符号在依赖于编译器集合的链接器选项中不动态可见。您拥有的依赖于TBB的代码可能也必须在包含链接到maplink的链接器步骤之外的单独链接器步骤中链接。并且需要链接应用程序,而无需重新链接TBB.dll


至少这是它在Linux中处理so文件的方式。

如评论中所述,您可以将较新版本的tbb.dll放入您的应用程序目录中,并且它应该可以在应用程序和它使用的第三方库中正常工作。例如,最新版本TBB 4.2与TBB 2.0的旧版本是二进制兼容的。

如评论中所述,您可以将TBB.dll的较新版本放入应用程序目录中,它应能在应用程序及其使用的第三方库中正常工作。例如,最新版本TBB 4.2与TBB 2.0的旧版本是二进制兼容的。

新版本的TBB.dll对两者都适用吗?由英特尔处理。新版本的TBB.dll对两者都适用吗?由英特尔处理。