从使用 tbb 的 C++ 项目构建 DLL 时出现错误 C2711

Error C2711 building DLL from a C++ project that uses tbb

我正在尝试构建一些 dll 以将一些计算机视觉方法包装在 c++ 软件中以将它们用于 c# 软件,我需要从 c++ 调用一些 tbb(线程构建块)方法处理一些帧的方法。我正在 visual studio 中使用字符集 Unicode 在 CLR 中进行开发,一旦我调用 tbb header

#include <tbb/tbb.h>

编译器给我错误:

error C2711: 'tbb::internal::concurrent_vector_base_v3::concurrent_vector_base_v3' try use #pragma unmanaged;

我已正确导入和链接库和 headers 文件,以及所需的 dll。 我在英特尔论坛上寻找过一些帮助,但一无所获。

这听起来像是您正在尝试使用 CLR 构建应用程序,但它不喜欢 tbb 的 header 中的某些代码。 Error C2711 在尝试按托管方式编译无法管理的代码时发生(例如,使用内联汇编)。

如果您不需要 CLR,您应该能够禁用它(删除 /clr)——这应该可以修复此警告。否则,您可以按照警告中的建议使用 #pragma unmanaged 来禁用它——我猜是在包含 tbb/tbb.h header 之前。类似于:

#pragma managed(push, off)
#include <tbb/tbb.h>
#pragma managed(pop)

这应该告诉项目 tbb.h 中的任何代码(例如可能 inline 使用汇编的函数)不应该发出 IL。


可能相关的是对 this question 的一些回答,其中描述了在 CLR 项目中通常如何与本机代码进行交互