gpt4 book ai didi

c++ - clang 编译器卡在 Windows 上

转载 作者:行者123 更新时间:2023-11-28 07:40:11 24 4
gpt4 key购买 nike

我在 manual 之后用 VS9 构建了 clang .

它的构建没有错误。但是当我试图编译一些代码时 - 它挂起(不消耗周期,两个进程),主干和 3.2 版本:

> "bin\clang++.exe" -c test.cpp -o test.bs -emit-llvm -v

clang version 3.2 (tags/RELEASE_32/final)
Target: i686-pc-win32
Thread model: posix
"C:/llvm/bin/clang++.exe" -cc1 -triple i686-pc-win32 -emit-llvm-bc -disable-free -main-file-name test.cpp -mrelocation-model static -mdisable-fp-elim -fmath-errno -masm-verbose -mconstructor-aliases -target-cpu pentium4 -momit-leaf-frame-pointer -v -coverage-file "C:\\llvm\\test.bs" -resource-dir "C:/llvm/bin\\..\\lib\\clang\\3.2" -fmodule-cache-path "C:\\Users\\qble\\AppData\\Local\\Temp\\1\\clang-module-cache" -internal-isystem C:/llvm/bin/../lib/clang/3.2/include -internal-isystem -std=c++11 -fdeprecated-macro -ferror-limit 19 -fmessage-length 0 -mstackrealign -fms-extensions -fms-compatibility -fmsc-version=1300 -fdelayed-template-parsing -fobjc-runtime=gcc -fobjc-default-synthesize-properties -fcxx-exceptions -fexceptions -fdiagnostics-show-option -o test.bs -x c++ test.cpp
clang -cc1 version 3.2 based upon LLVM 3.2svn default target i686-pc-win32 -std=c++11 -fdeprecated-macro -ferror-limit 19 -fmessage-length 0 -mstackrealign -fms-extensions -fms-compatibility -fmsc-version=1300 -fdelayed-template-parsing -fobjc-runtime=gcc -fobjc-default-synthesize-properties -fcxx-exceptions -fexceptions -fdiagnostics-show-option -o test.bs -x c++ test.cpp "
#include "..." search starts here:
#include <...> search starts here:
C:/llvm/bin/../lib/clang/3.2/include
End of search list.
[HANG IS HERE]^C

怎么了?如何让它发挥作用?

编辑:

Can you find where the second process is launched? Is its stdin redirected to a pipe?

第二个进程在这里执行,它是“clang.exe”:

>clang.exe!llvm::sys::Program::ExecuteAndWait(const llvm::sys::Path & path={...}, const char * * args=0x001ba3f0, const char * * envp=0x00000000, const llvm::sys::Path * * redirects=0x00000000, unsigned int secondsToWait=0, unsigned int memoryLimit=0, std::basic_string<char,std::char_traits<char>,std::allocator<char> > * ErrMsg="")  line 34  C++
clang.exe!clang::driver::Compilation::ExecuteCommand(const clang::driver::Command & C={...}, const clang::driver::Command * & FailingCommand=0x00000000) line 282 + 0x24 bytes C++
clang.exe!clang::driver::Compilation::ExecuteJob(const clang::driver::Job & J={...}, const clang::driver::Command * & FailingCommand=0x00000000) line 298 + 0x10 bytes C++
clang.exe!clang::driver::Compilation::ExecuteJob(const clang::driver::Job & J={...}, const clang::driver::Command * & FailingCommand=0x00000000) line 303 + 0x12 bytes C++
clang.exe!clang::driver::Driver::ExecuteCompilation(const clang::driver::Compilation & C={...}, const clang::driver::Command * & FailingCommand=0x00000000) line 508 + 0x15 bytes C++
clang.exe!main(int argc_=3, const char * * argv_=0x001b28c0) line 476 + 0x1e bytes C++

编辑:

如果我运行:

type test.cpp | ..\build\bin\Debug\clang.exe -emit-llvm -c test.cpp -o test.bs

或者直接从上面的 clang 输出命令行 - 我得到了真正的编译错误(关于标题)。所以,看起来参数解析/传递有问题。

最佳答案

问题出在我的INCLUDE 环境变量上。它有这样的路径

c:\some\dir\

clang 将其传递给子进程(Win CreateProcess 接受连接的参数):

clang.exe someargs "c:\some\dir\" otherargs

看起来由于最后一个反斜杠,双引号被“转义”了,因为子进程中的 argv_ 是:

somepath/clang.exe
someargs
c:\some\dir" otherargs

请注意反斜杠是如何“使用”的,并且 otherargs 与该路径连接,这就是它等待的原因 - 它没有获得 args 的一部分。

应修复 Clang 的 Program::Execute 以支持转义反斜杠或解析 INCLUDE env var 的代码。

编辑 来自 Stefan v.K : llvm 错误跟踪器中的相应条目以及可能的补丁。 http://llvm.org/bugs/show_bug.cgi?id=15802

关于c++ - clang 编译器卡在 Windows 上,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15992645/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com