TL;博士
是否可以使用C++/CLI (即Boost.Regex项目,即_MANAGED项目)以头纯模式(非BOOST_REGEX_CXX03模式)编译/clr 1.76?
多年来,我们一直在常规的VisualC++项目中使用Boost.Regex。我们的一些项目是用Common Language Runtime Support (/clr)编译的,它支持C++/CLI (对于这些项目,我们总是静态地在boost regex库中链接)。我们总是预先构建boost正则表达式、DLL和静态库,然后从MSVC链接它们。
现在,除非在用Boost 1.76模式下编译,否则新的Boost.Regex仅是标头。
( 1.76.0版). Regex:
但是,我们的C++/CLI项目将--通过boost配置魔术--自动选择在C++03 == BOOST_REGEX_CXX03模式下构建==!
_MSC_FULL_VER 192729112由于不再需要预先构建任何Boost.Regex二进制文件将非常方便,我们目前正在研究是否可以让C++/CLI项目在非 BOOST_REGEX_CXX03模式下编译:
_MANAGED项目选择宏_MANAGED吗?(我目前怀疑_CPPLIB_VER,但我甚至不确定这是什么版本。)是否可以使用C++/CLI (即/clr ,即 _MANAGED 项目?)在标头模式下编译Boost.Regex 1.76
发布于 2021-05-17 12:35:50
要快速回答这个问题:No在C++11模式下编译Boost.Regex是不可能的,这是非C++03模式,带有/clr标志。
BOOST_REGEX_CXX03在/clr下被选中的原因是,如果设置了任何... BOOST_NO_CXX11_HDR_MUTEX ... BOOST_NO_CXX11_HDR_ATOMIC ...,boost\regex\config.hpp就会选择它,而则是在... BOOST_NO_CXX11_HDR_MUTEX ... BOOST_NO_CXX11_HDR_ATOMIC ...下设置的,因为C++/CLI只支持C++03,或者更确切地说,它支持所有C++03,而例如在C++/CLI中不支持std::mutex。
As 其他人写了
它不受支持,因为std::mutex实现使用GetCurrentThreadId()。这是一个不应该在托管代码中使用的winapi函数,因为它可能运行在不使用线程实现线程的自定义CLR主机上。 这是一个很好的问题,它表明您正在构建错误的代码。您的本机C++实际上是用/clr编译的。它工作得太好了,所有符合C++03的代码都可以编译成MSIL .
因此,您需要在翻译单元中使用Boost.regex (编译的/clr ),必须使用C++03模式。
至于OP问题:应该检查使用C++/CLI的给定VC++项目是否真的需要编译所有带有/clr on的文件,或者实际上使用Boost.Regex的翻译单元无论如何都是原生的C++,可以不使用/clr编译,然后与C++/CLI对象文件链接在一起。
https://stackoverflow.com/questions/67566702
复制相似问题