问题描述
我有一个包含托管 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
。