clang无法根据新的MSVC 2019和Windows SDK 10.0.17763.0构建libc++(重新定义nothrow_t、new、delete、new[],delete[])

clang无法根据新的MSVC 2019和Windows SDK 10.0.17763.0构建libc++(重新定义nothrow_t、new、delete、new[],delete[]),c++,clang,llvm,libc++,C++,Clang,Llvm,Libc++,似乎有5个符号冲突:nothrow\u t、new、delete、new[],delete[] 这是我的名片。也试了19.20 cmake -G Ninja -DCMAKE_BUILD_TYPE=Release -DCMAKE_MAKE_PROGRAM="C:/Program Files (x86)/Ninja/ninja.exe" -DCMAKE_SYSTEM_NAME=Windows -DCMAKE_C_COMPILER="C:/Program Files/LLVM/bin/clang-c

似乎有5个符号冲突:nothrow\u t、new、delete、new[],delete[]

这是我的名片。也试了19.20

cmake -G Ninja -DCMAKE_BUILD_TYPE=Release -DCMAKE_MAKE_PROGRAM="C:/Program Files (x86)/Ninja/ninja.exe" 
-DCMAKE_SYSTEM_NAME=Windows -DCMAKE_C_COMPILER="C:/Program Files/LLVM/bin/clang-cl.exe" 
-DCMAKE_C_FLAGS="-fms-compatibility-version=19.00 --target=x86_64--windows -D_LIBC_NO_VCRUNTIME" 
-DCMAKE_CXX_COMPILER="C:/Program Files/LLVM/bin/clang-cl.exe" 
-DCMAKE_CXX_FLAGS="-fms-compatibility-version=19.00 --target=x86_64--windows -D_LIBC_NO_VCRUNTIME -D_LIBCPP_NO_VCRUNTIME" 
-DCMAKE_C_LINK_EXECUTABLE="C:/Program Files/LLVM/bin/lld-link.exe" 
-DCMAKE_CXX_LINK_EXECUTABLE="C:/Program Files/LLVM/bin/lld-link.exe" 
-DLLVM_USE_LINKER="C:/Program Files/LLVM/bin/lld-link.exe" 
-DLLVM_PATH="C:/Program Files/LLVM" -DLIBCXX_ENABLE_SHARED=YES 
-DLIBCXX_ENABLE_STATIC=NO -DLIBCXX_ENABLE_EXPERIMENTAL_LIBRARY=YES 
"C:/Users/User/AppData/Roaming/libcxx-master"
这是我的SDK

set LIB=C:\Program Files (x86)\Microsoft Visual Studio\2019\BuildTools\VC\Tools\MSVC\14.20.27508\lib\x64;
C:\Program Files (x86)\Windows Kits\10\Lib\10.0.17763.0\ucrt\x64;
C:\Program Files (x86)\Windows Kits\10\Lib\10.0.17763.0\um\x64

我能让它工作吗?将问题发送给谁?

我在VS2019中面临同样的问题。 我没有删除任何运行时标志,但设置了 -DCMAKE_C_LINK_EXECUTABLE=lld-LINK.exe-flavor LINK^ -DCMAKE_CXX_LINK_EXECUTABLE=lld-LINK.exe-flavor LINK^ 添加了-flavor链接,链接成功。我并没有测试异常,但使用std::thread测试程序的编译和运行与使用cl编译器相同

UPD:std::exception抛出的基本try-catch有效

UPD:完整cmake批处理您的路径可能会有所不同

cmake -G Ninja -DCMAKE_BUILD_TYPE=Release -DCMAKE_MAKE_PROGRAM="D:/Programming/ninja-build/ninja.exe" ^
-DCMAKE_SYSTEM_NAME=Windows -DCMAKE_C_COMPILER="clang-cl.exe" ^
-DCMAKE_C_FLAGS="-fms-compatibility-version=19.00 --target=x86_64--windows" ^
-DCMAKE_CXX_COMPILER="clang-cl.exe" ^
-DCMAKE_CXX_FLAGS="-fms-compatibility-version=19.00 --target=x86_64--windows " ^
-DCMAKE_C_LINK_EXECUTABLE="lld-link.exe -flavor link" ^
-DCMAKE_CXX_LINK_EXECUTABLE="lld-link.exe -flavor link" ^
-DLLVM_USE_LINKER="lld-link.exe" ^
-DLLVM_PATH="C:/Program Files/LLVM" -DLIBCXX_ENABLE_SHARED=YES ^
-DLIBCXX_ENABLE_STATIC=NO -DLIBCXX_ENABLE_EXPERIMENTAL_LIBRARY=YES ^
"D:\Programming\cpp_sandbox\libcxx-9.0.0.src"

您使用的是[clang],而不是[visual c++]。期望一个编译器对另一个编译器的include文件感到满意会导致流泪。如果您想使用Clang,那么您应该安装它的VS特定风格。返回安装程序,选择“修改”。复选框应位于各个组件选项卡下。在VS2017中曾被命名为Clang/C2。@HansPassant这组CMAKE参数在MSVC 2017中运行良好。我以前用它成功地建造过。我只是想知道我如何才能让它与MSVC 2019一起工作?我尝试过没有-flavor链接,它也可以工作,-flavor链接做什么?它告诉clang linker使用MSVC链接器。现在还有另一个问题-我不能在没有MSVC的情况下使用这个库,因为它不能包含_next,即使我尝试将-MT添加到链接器标志-这没有帮助,它只需要一些其他系统标题,但我不希望MSVC出现在我的PC上。。。。也许你知道如何完全独立地构建它吗?我自己从未尝试过,但我认为你可以尝试使用msys2 gcc静态标准库libstdc++.a=>,使用clang++-driver mode=g++。尽管如此,我确信这将取决于OS msvcrt.dll NT CRT,而不是visual studio的。@sandthorn问题是默认情况下,clang使用-deafultlib:libcmt调用链接器,我不知道如何修复它,除了将构建拆分为clang-c。。。和lld link-defaultlib:msvcrt…@sandthorn您还可以给我一个关于如何使用NT库构建的示例吗?
cmake -G Ninja -DCMAKE_BUILD_TYPE=Release -DCMAKE_MAKE_PROGRAM="D:/Programming/ninja-build/ninja.exe" ^
-DCMAKE_SYSTEM_NAME=Windows -DCMAKE_C_COMPILER="clang-cl.exe" ^
-DCMAKE_C_FLAGS="-fms-compatibility-version=19.00 --target=x86_64--windows" ^
-DCMAKE_CXX_COMPILER="clang-cl.exe" ^
-DCMAKE_CXX_FLAGS="-fms-compatibility-version=19.00 --target=x86_64--windows " ^
-DCMAKE_C_LINK_EXECUTABLE="lld-link.exe -flavor link" ^
-DCMAKE_CXX_LINK_EXECUTABLE="lld-link.exe -flavor link" ^
-DLLVM_USE_LINKER="lld-link.exe" ^
-DLLVM_PATH="C:/Program Files/LLVM" -DLIBCXX_ENABLE_SHARED=YES ^
-DLIBCXX_ENABLE_STATIC=NO -DLIBCXX_ENABLE_EXPERIMENTAL_LIBRARY=YES ^
"D:\Programming\cpp_sandbox\libcxx-9.0.0.src"