C1189 #error: 使用 /clr 或 /clr:pure 编译时不支持 <mutex>

问题描述

我有一个包含托管 C++ 类和非托管 C++ 类的 C++ 库,因此该库使用 /clr 支持进行编译。我需要在非托管端进行一些线程安全锁定,但如果我包含我有编译器错误

C1189 #error: <mutex> is not supported when compiling with /clr or /clr:pure

我该如何解决这个问题?花了几个小时搜索,但只找到了非常旧的信息。使用 Visual Studio 2017 和 C++11 语言标准。

解决方法

混合模式项目可以包含非托管 C++ 和托管 C++/CLI 代码。由于 <mutex> " is not supported whencompile with /clr" 需要将需要它的代码移动到单独的 .cpp 文件集以编译 没有 /clr。这可以通过向项目添加新的 .cpp 文件,然后从 {{1} } 到 none 对于特定的 /clr 文件(不是对于整个项目)。

  • 必须将代码移至单独的文件集以进行编译,而无需完整地使用 .cpp。仅将代码放在使用 /clr 编译的文件中的 #pragma unmanaged 块中是行不通的。

  • 如果项目使用预编译头,则新文件必须设置为使用预编译头,因为该头不应该在构建的对象之间共享有与没有 /clr