【问题标题】:Error C2711 building DLL from a C++ project that uses tbb从使用 tbb 的 C++ 项目构建 DLL 时出现错误 C2711
【发布时间】:2020-06-08 15:31:03
【问题描述】:

我正在尝试构建一些 dll 以将一些计算机视觉方法包装在 c++ 软件中以使用它们 ac# 软件,并且我需要从 c++ 方法调用一些 tbb(线程构建块)方法来处理一些框架。我在 Visual Studio 中使用 Charset Unicode 在 CLR 中开发,一旦我调用 tbb 标头

#include <tbb/tbb.h>

编译器给我错误:

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

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

【问题讨论】:

    标签: c++ visual-c++ clr intel tbb


    【解决方案1】:

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

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

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

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


    可能与this question 的一些答案有关,它描述了在 CLR 项目中与本机代码的接口通常是如何完成的

    【讨论】:

    • 非常感谢,第二个选项解决了问题。
    • 乐于助人。如果这对您有用,请记住接受答案:)
    猜你喜欢
    • 1970-01-01
    • 2013-11-05
    • 1970-01-01
    • 2019-08-02
    • 1970-01-01
    • 2020-06-16
    • 1970-01-01
    • 2015-03-05
    • 2019-02-03
    相关资源
    最近更新 更多