Clang 使用libc++;在窗户上?

Clang 使用libc++;在窗户上?,clang,llvm,Clang,Llvm,libc++是否支持在以Clang/LLVM为本机的Windows上引用/包含和编译?对于土生土长的人来说,我的意思是不依赖明格和西格温。我没有找到太多关于这个的文档,但我相信它应该得到支持,因为clang for Windows已经发布很长时间了。只是一个更新。现在有实验支持(2018年初): (来自链接) 假设您已经签出了Ninja和libcxx/llvm,那么libcxx可以通过 > cmake -G Ninja

libc++是否支持在以Clang/LLVM为本机的Windows上引用/包含和编译?对于土生土长的人来说,我的意思是不依赖明格和西格温。我没有找到太多关于这个的文档,但我相信它应该得到支持,因为clang for Windows已经发布很长时间了。

只是一个更新。现在有实验支持(2018年初):

(来自链接)

假设您已经签出了Ninja和libcxx/llvm,那么libcxx可以通过

> cmake -G Ninja                                                                    ^
        -DCMAKE_MAKE_PROGRAM=/path/to/ninja                                         ^
        -DCMAKE_SYSTEM_NAME=Windows                                                 ^
        -DCMAKE_C_COMPILER=clang-cl                                                 ^
        -DCMAKE_C_FLAGS="-fms-compatibility-version=19.00 --target=i686--windows"   ^
        -DCMAKE_CXX_COMPILER=clang-cl                                                ^
        -DCMAKE_CXX_FLAGS="-fms-compatibility-version=19.00 --target=i686--windows" ^
        -DLLVM_PATH=/path/to/llvm/tree                                              ^
        -DLIBCXX_ENABLE_SHARED=YES                                                  ^
        -DLIBCXX_ENABLE_STATIC=NO                                                   ^
        -DLIBCXX_ENABLE_EXPERIMENTAL_LIBRARY=NO                                     ^
        \path\to\libcxx
> /path/to/ninja cxx
 
从2018年4月23日起,它将安装到程序文件(x86)中,即使编译为x86-64。。。(可以通过在上面将i686更改为x86_64来完成)

2020年11月更新:我现在使用一个名为的包。

该软件包包括带有包装器的clang编译器工具链,以支持各种gcc风格的可执行文件(例如,gcc.exe、g++.exe、x86_64-w64-mingw32-gcc.exe),并且可以开箱即用地根据mingw libc++进行编译(您不必单独安装mingw,mingw库随软件包一起提供)

llvm mingw还很年轻,但具有mingw-w64的大部分功能。未实现的功能包括:

  • lld链接到dll(这是GNULD的一个特性,但不是llvm实现)
  • lldb没有python包装,因此许多IDE无法使用调试器。VisualStudio代码似乎有自己的链接,所以LLDB SOE可以使用VS代码。人们现在正在做这件事

发布版可在作者github repo上获得。我的网站上有一个二进制安装程序。

通过将
LLVM\u FORCE\u build\u RUNTIME
cmake的变量设置为
ON
,可以在Windows中构建和安装
libc++
clang
。以下是一个例子:

cmake -Wno-dev -G Ninja
    -DCMAKE_INSTALL_PREFIX=c:\clang
    -DLLVM_ENABLE_Z3_SOLVER=ON
    -DLLVM_ENABLE_PROJECTS='clang;clang-tools-extra;compiler-rt;libcxx;lld'
    -DLLVM_FORCE_BUILD_RUNTIME=ON
    -DCMAKE_BUILD_TYPE=Release
    -DCMAKE_C_COMPILER=clang-cl
    -DCMAKE_CXX_COMPILER=clang-cl
    -DCMAKE_CXX_FLAGS='/DWIN32 /D_WINDOWS /W3 /GS- /GR /EHsc /D_CRT_SECURE_NO_DEPRECATE /D_SECURE_SCL_DEPRECATE=0 /D_SECURE_SCL=0 /D_HAS_ITERATOR_DEBUGGING=0 /DSTRSAFE_NO_DEPRECATE'
    -DCMAKE_CXX_FLAGS_RELEASE='/MD /clang:-march=native /clang:-mtune=native /clang:-O3 /clang:-g0 /DNDEBUG'
    -DCMAKE_C_FLAGS='/GS- /DWIN32 /D_WINDOWS /W3 /D_CRT_SECURE_NO_DEPRECATE /D_SECURE_SCL_DEPRECATE=0 /D_SECURE_SCL=0 /DSTRSAFE_NO_DEPRECATE'
    -DCMAKE_C_FLAGS_RELEASE='/MD /clang:-march=native /clang:-mtune=native /clang:-O3 /clang:-g0 /DNDEBUG'
    ..\llvm-project\llvm
然而,有一个陷阱。Windows中的Clang驱动程序仍然不支持
libc++
,因此如果要使用
libc++
,必须手动添加头文件目录和
c++.lib
。如果您查看一下Clang的驱动程序源代码,9年前还有一行代码:

void MSVCToolChain::AddClangCXXStdlibIncludeArgs(常量ArgList和驱动器args,
ArgStringList和CC1Args)常量{
//FIXME:在Windows上查找libc++可能有一定的逻辑。
}
增加支持并不是一门火箭科学,只是显示了作者对支持Windows的兴趣程度

使用
libc++
的一个示例(使用上面的cmake示例编译和安装clang后):


可能不会。我大约在一年前尝试过这个方法,由于缺乏异常支持,在编译libc++-abi时遇到了很多麻烦。我一直在尝试让Clang在Windows上工作。Clang for Windows已以现成的Windows安装软件包的形式发布,请参阅。如果我没有弄错的话,它需要MSVC的链接器和stdlib,这就是我不使用它的原因。欢迎链接到解决方案,但请确保您的答案在没有它的情况下是有用的:这样您的其他用户就会知道它是什么以及它为什么存在,然后引用你链接到的页面最相关的部分,以防目标页面不可用。令人惊叹的!谢谢@IronManMark20
clang++ -isystem 'c:\clang\include' -isystem 'c:\clang\include\c++\v1' -c .\test.cpp -o test.o
clang++ -fuse-ld=lld test.o -o test.exe -L'c:\clang\lib' -lc++