gpt4 book ai didi

c++ - 依赖于 msvcr120d.dll Visual Studio 2015(英特尔 TBB)

转载 作者:行者123 更新时间:2023-11-30 05:39:46 26 4
gpt4 key购买 nike

为了让英特尔 TBB(线程构建 block )与 visual studio 2015 一起工作,我尝试了以下方法(因为默认情况下,构建的二进制文件仅适用于 vs2013)。

使用 Visual Studio 2015 编译英特尔 TBB -

  1. Here 下载英特尔 TBB 的源代码.
  2. 提取它,
  3. 打开 VS2010 解决方案 makefile.sln带路径 tbb<version>\build\VS2010
  4. 批准项目文件转换为使用 Visual 2015 工具包
  5. 选择调试配置和 x64 平台和 buid。 (请注意,如果之前的构建已经完成,则重新构建(清理并构建))。
  6. tbb<version>\build\VS2010\intel64\Debug复制dll、pdb、lib、exp、def文件至 tbb<version>\lib\Debug .

创建新的空 Visual C++ 项目

对调试、x64 配置进行以下更改

  1. 添加额外的包含目录tbb<version>\include
  2. 添加额外的图书馆目录 tbb<version>\lib\Debug
  3. 添加以下库依赖

    tbbmalloc_debug.lib
    tbbmalloc_proxy_debug.lib
    tbb_debug.lib
  4. 选择 Debug, x64配置和构建。构建成功。

用于测试的代码如下:

#include <iostream>
#include <vector>
#include <random>

#include <tbb/parallel_for.h>

// #include "..\Headers\MexMem.hpp"

using namespace std;

int main() {

std::vector<int> A(100, 0);
std::vector<int> B(100, 0);
std::vector<int> C(100, 0);

mt19937_64 RandNoEngine;
uniform_int_distribution<int> RandNoGenerator;

for (int i = 0; i < A.size(); ++i) {
A[i] = RandNoGenerator(RandNoEngine);
B[i] = RandNoGenerator(RandNoEngine);
}

tbb::parallel_for(tbb::blocked_range<int>(0, 100), [&](tbb::blocked_range<int> &Range) {
int beg = Range.begin();
int end = Range.end();
for (int i = beg; i < end; ++i) {
C[i] = A[i] * B[i];
}
});
cout << A[30] << " * " << B[30] << " = " << C[30] << endl;
system("pause");
return 0;
}

按F5调试,这里我得到一个错误The program can't start because MSVCP120D.dll is missing from your computer。尝试重新安装程序以修复此问题。 下一条消息与 MSVCR120D.dll 相关。请注意,这是在使用 Visual 2015 构建所有内容(包括 TBB 库)之后发生的。

附加信息

使用 Dependancy Walker (depends.exe) 的快速分析给出了以下结果:

tbb_debug.lib 的依赖如下

- TBB_DEBUG.dll 
- KERNEL32.DLL
- MSVCP140D.DLL
- VCRUNTIME140D.DLL
- UCRTBASED.DLL

然而 tbb_debug.lib 的依赖项如图所示的Exe(上面程序的exe)如下:

- TBB_EXPERIMENT.EXE
- TBB_DEBUG.dll
? MSVCP120D.DLL
? MSVCR120D.DLL
- KERNEL32.

为什么会出现差异?有没有办法获得与此相关的更多信息,最后,有没有办法在 Visual Studio 2015 上正确编译和调试英特尔 TBB?

最佳答案

这看起来像是加载了错误的 TBB_DEBUG.DLL。在 Dependency Walker 中检查 DLL 的完整路径。

关于c++ - 依赖于 msvcr120d.dll Visual Studio 2015(英特尔 TBB),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32131929/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com