微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

为什么不在Windows上的llvm-config为clang ++exe发出正确的参数?

我不是有经验的LLVM用户,但是我想在Windows上编译一个Linux LLVM项目。 该项目是GHDL。

由于Windows准备使用的LLVM安装程序没有绑定llvm-config ,所以我需要从源代码编译LLVM和clange。 该项目需要LLVM 3.5。

所以首先,我下载了llvm-3.5.2和clang-3.5.2并使用CMake将其转换为Visual Studio 2013项目。 然后我用VS2013编译它。

原始的makefile调用llvm-config 。 结果string传递给clang++ :

你需要使用哪些库来链接叮当声程序

铿锵的ubsan&function指针:这是非法的吗?

使用clang ++时认启用libc ++ / libcxx

静态链接libstdc ++使用clang

在Windows中安装Clang的问题

clang++ -c -I`/usr/lib/llvm-3.5/bin/llvm-config --includedir --cflags --cxxflags` -o llvm-cbindings.o src/ortho/llvm/llvm-cbindings.cpp

我使用PowerShell调用llvm-config并将结果存储在一个variables中:

$LLVM_CONfig_RESULT = & $LLVM_CONfig --cxxflags

结果是:

-IC:ToolsllVM-3.5/include /DWIN32 /D_WINDOWS /W3 /MP -D_CRT_SECURE_NO_DEPRECATE -D_CRT_SECURE_NO_WARNINGS -D_CRT_NONSTDC_NO_DEPRECATE -D_CRT_NONSTDC_NO_WARNINGS -D_SCL_SECURE_NO_DEPRECATE -D_SCL_SECURE_NO_WARNINGS -wd4146 -wd4180 -wd4244 -wd4267 -wd4291 -wd4345 -wd4351 -wd4355 -wd4503 -wd4624 -wd4722 -wd4800 -w14062 -we4238 -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS

我注意到几个问题:

有些path有/而不是

-IC:ToolsllVM-3.5/include

一些开关和参数用于-其他与/

... -IC:ToolsllVM-3.5/include /DWIN32 /D_WINDOWS ...

一些参数由多个空格符号分隔

... /W3 /MP ...

铿锵声++。exe在未知参数上打印错误

铿锵声++。exe:错误:未知参数:'-wd4146'

铿锵声++。exe:错误:未知参数:'-wd4180'

铿锵声++。exe:错误:未知参数:'-wd4244'

铿锵声++。exe:错误:未知参数:'-wd4267'

铿锵声++。exe:错误:未知参数:'-wd4291'

铿锵声++。exe:错误:未知参数:'-wd4345'

铿锵声++。exe:错误:未知参数:'-wd4351'

铿锵声++。exe:错误:未知参数:'-wd4355'

铿锵声++。exe:错误:未知参数:'-wd4503'

铿锵声++。exe:错误:未知参数:'-wd4624'

铿锵声++。exe:错误:未知参数:'-wd4722'

铿锵声++。exe:错误:未知参数:'-wd4800'

铿锵声++。exe:错误:未知参数:'-w14062'

铿锵++。exe:错误:未知参数:'-we4238'

结果现在包含在clang ++。exe调用中,这会导致错误

Command: 'C:ToolsllVM-3.5binclang++.exe -c -c -v -IC:ToolsllVM-3.5/include /DWIN32 /D_WINDOWS /W3 /MP -D_CRT_SECURE_NO_DEPRECATE -D_CRT_SECURE_NO_WARNINGS -D_CRT_NONSTDC_NO_DEPRECATE -D_CRT_NONSTDC_NO_WARNINGS -D_SCL_SECURE_NO_DEPRECATE -D_SCL_SECURE_NO_WARNINGS -wd4146 -wd4180 -wd4244 -wd4267 -wd4291 -wd4345 -wd4351 -wd4355 -wd4503 -wd4624 -wd4722 -wd4800 -w14062 -we4238 -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS -o llvm-cbindings.o ../../srcorthollvmllvm-bindings.cpp -o llvm-cbindings.o ../../srcorthollvmllvm-cbindings.cpp' clang++.exe: error: unkNown argument: '-wd4146' clang++.exe: error: unkNown argument: '-wd4180' clang++.exe: error: unkNown argument: '-wd4244' clang++.exe: error: unkNown argument: '-wd4267' clang++.exe: error: unkNown argument: '-wd4291' clang++.exe: error: unkNown argument: '-wd4345' clang++.exe: error: unkNown argument: '-wd4351' clang++.exe: error: unkNown argument: '-wd4355' clang++.exe: error: unkNown argument: '-wd4503' clang++.exe: error: unkNown argument: '-wd4624' clang++.exe: error: unkNown argument: '-wd4722' clang++.exe: error: unkNown argument: '-wd4800' clang++.exe: error: unkNown argument: '-w14062' clang++.exe: error: unkNown argument: '-we4238' clang version 3.5.2 (tags/RELEASE_352/final) Target: i686-pc-windows-msvc Thread model: posix clang++.exe: error: no such file or directory: '/DWIN32' clang++.exe: error: no such file or directory: '/D_WINDOWS' clang++.exe: error: no such file or directory: '/W3' clang++.exe: error: no such file or directory: '/MP'

所以这是我的问题:

为什么llvm-config在Windows上发出错误的结果?

我该如何解决

这些-wd***开关是什么?

在Linux上为Mac交叉编译简单的标准C程序

在Windows上构buildClang:DiagnosticCommonKinds.inc标题不存在

代码覆盖在铛

你需要安装使用Clang在Windows上构build64位的C + + 14?

在LLVM上的Syscall / sysenter

为什么llvm-config在Windows上发出错误的结果?

我该如何解决

它不是。 llvm-config为您提供了正确的参数,但是您在Windows上使用了错误的前端。 铿锵声++是为最初有一个GNU编译器工具链(g ++等)的平台而构建的。 Windows前端(clang-cl)是Visual Studio工具链的替代品,并接受由llvm-config提供的值。

从您的用例调用clang++结果在:

PS C:UsersXXX> clang++ -wd4146 clang++.exe: error: unkNown argument: '-wd4146' clang++.exe: error: no input files

同时调用clang-cl

PS C:UsersXXX> clang-cl -wd4146 clang-cl.exe: error: no input files

按预期工作。 这是因为GNU和Visual Studio工具链对前端有不同的命令行标志。 这导致你最后一个问题:

这些-wd ***开关是什么?

使用-wd ***开关禁用特定的编译器警告,例如4146 在这里记录 :

C4146: unary minus operator applied to unsigned type,result still unsigned

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐