Clang在Windows 10

问题描述

我遵循official tutorial使用Microsoft VS 2019社区版本构建clang / LLVM,并且我遵循this post将clang作为C ++编译器嵌入到我的应用程序中。

我将Windows SDK和C ++头文件夹复制到名为 um 14.27.29110 的桌面上,我有名为test.cpp的示例C ++代码。当我尝试运行程序来编译test.cpp生成可执行文件时,clang在不同的头文件生成错误,如下所示:

clang -cc1 version 12.0.0 based upon LLVM 12.0.0git default target x86_64-pc-windows-msvc
#include "..." search starts here:
#include <...> search starts here:
 C:/Users/Zirian/Desktop/14.27.29110/include
 C:/Users/Zirian/Desktop/um
End of search list.
In file included from test.cpp:1:
In file included from C:/Users/Zirian/Desktop/14.27.29110/include\iostream:9:
In file included from C:/Users/Zirian/Desktop/14.27.29110/include\yvals_core.h:310:
In file included from C:/Users/Zirian/Desktop/14.27.29110/include\vcruntime.h:58:
C:/Users/Zirian/Desktop/14.27.29110/include\vadefs.h:61:33: error: expected ';' after top level declarator
        typedef unsigned __int64  uintptr_t;
                                ^
                                ;
In file included from test.cpp:1:
In file included from C:/Users/Zirian/Desktop/14.27.29110/include\iostream:9:
In file included from C:/Users/Zirian/Desktop/14.27.29110/include\yvals_core.h:310:
C:/Users/Zirian/Desktop/14.27.29110/include\vcruntime.h:96:1: error: C++ requires a type specifier for all declarations
_CRT_BEGIN_C_HEADER
^
C:/Users/Zirian/Desktop/14.27.29110/include\vcruntime.h:69:9: note: expanded from macro '_CRT_BEGIN_C_HEADER'
        __pragma(pack(push,_CRT_PACKING)) \
        ^
C:/Users/Zirian/Desktop/14.27.29110/include\vcruntime.h:96:1: error: use of undeclared identifier 'push'
C:/Users/Zirian/Desktop/14.27.29110/include\vcruntime.h:69:23: note: expanded from macro '_CRT_BEGIN_C_HEADER'
        __pragma(pack(push,_CRT_PACKING)) \
                      ^
C:/Users/Zirian/Desktop/14.27.29110/include\vcruntime.h:96:1: error: expected ';' after top level declarator
C:/Users/Zirian/Desktop/14.27.29110/include\vcruntime.h:70:9: note: expanded from macro '_CRT_BEGIN_C_HEADER'
        extern "C" {
        ^
C:/Users/Zirian/Desktop/14.27.29110/include\vcruntime.h:193:29: error: expected ';' after top level declarator
    typedef unsigned __int64 size_t;
                            ^
                            ;
C:/Users/Zirian/Desktop/14.27.29110/include\vcruntime.h:228:22: error: 'short wchar_t' is invalid
    typedef unsigned short wchar_t;
                     ^
C:/Users/Zirian/Desktop/14.27.29110/include\vcruntime.h:228:5: warning: typedef requires a name [-Wmissing-declarations]
    typedef unsigned short wchar_t;
    ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
C:/Users/Zirian/Desktop/14.27.29110/include\vcruntime.h:252:42: error: unkNown type name 'size_t'
        template <typename _CountofType,size_t _SizeOfArray>
                                         ^
C:/Users/Zirian/Desktop/14.27.29110/include\vcruntime.h:253:33: error: unkNown type name '__unaligned'
        char (*__countof_helper(_UNALIGNED _CountofType (&_Array)[_SizeOfArray]))[_SizeOfArray];
                                ^
C:/Users/Zirian/Desktop/14.27.29110/include\vcruntime.h:240:24: note: expanded from macro '_UNALIGNED'
    #define _UNALIGNED __unaligned
                       ^
C:/Users/Zirian/Desktop/14.27.29110/include\vcruntime.h:253:59: error: C++ requires a type specifier for all declarations
        char (*__countof_helper(_UNALIGNED _CountofType (&_Array)[_SizeOfArray]))[_SizeOfArray];
                                                          ^
C:/Users/Zirian/Desktop/14.27.29110/include\vcruntime.h:253:44: error: declaration of '_CountofType' shadows template parameter
        char (*__countof_helper(_UNALIGNED _CountofType (&_Array)[_SizeOfArray]))[_SizeOfArray];
                                           ^
C:/Users/Zirian/Desktop/14.27.29110/include\vcruntime.h:252:28: note: template parameter is declared here
        template <typename _CountofType,size_t _SizeOfArray>
                           ^
C:/Users/Zirian/Desktop/14.27.29110/include\vcruntime.h:348:51: error: unkNown type name 'uintptr_t'; did you mean 'intptr_t'?
        void __cdecl __security_check_cookie(_In_ uintptr_t _StackCookie);
                                                  ^~~~~~~~~
                                                  intptr_t
C:/Users/Zirian/Desktop/14.27.29110/include\vcruntime.h:195:30: note: 'intptr_t' declared here
    typedef __int64          intptr_t;
                             ^
C:/Users/Zirian/Desktop/14.27.29110/include\vcruntime.h:349:9: error: '__declspec' attributes are not enabled; use '-fdeclspec' or '-fms-extensions' to enable support for __declspec attributes
        __declspec(noreturn) void __cdecl __report_gsfailure(_In_ uintptr_t _StackCookie);
        ^
C:/Users/Zirian/Desktop/14.27.29110/include\vcruntime.h:349:67: error: unkNown type name 'uintptr_t'; did you mean 'intptr_t'?
        __declspec(noreturn) void __cdecl __report_gsfailure(_In_ uintptr_t _StackCookie);
                                                                  ^~~~~~~~~
                                                                  intptr_t
C:/Users/Zirian/Desktop/14.27.29110/include\vcruntime.h:195:30: note: 'intptr_t' declared here
    typedef __int64          intptr_t;
                             ^
C:/Users/Zirian/Desktop/14.27.29110/include\vcruntime.h:353:8: error: unkNown type name 'uintptr_t'; did you mean 'intptr_t'?
extern uintptr_t __security_cookie;
       ^~~~~~~~~
       intptr_t
C:/Users/Zirian/Desktop/14.27.29110/include\vcruntime.h:195:30: note: 'intptr_t' declared here
    typedef __int64          intptr_t;
                             ^
C:/Users/Zirian/Desktop/14.27.29110/include\vcruntime.h:361:1: error: C++ requires a type specifier for all declarations
_CRT_END_C_HEADER
^
C:/Users/Zirian/Desktop/14.27.29110/include\vcruntime.h:74:9: note: expanded from macro '_CRT_END_C_HEADER'
        __pragma(pack(pop))
        ^
C:/Users/Zirian/Desktop/14.27.29110/include\vcruntime.h:361:1: error: use of undeclared identifier 'pop'
C:/Users/Zirian/Desktop/14.27.29110/include\vcruntime.h:74:23: note: expanded from macro '_CRT_END_C_HEADER'
        __pragma(pack(pop))
                      ^
C:/Users/Zirian/Desktop/14.27.29110/include\vcruntime.h:361:18: error: expected ';' after top level declarator
_CRT_END_C_HEADER
                 ^
                 ;
In file included from test.cpp:1:
In file included from C:/Users/Zirian/Desktop/14.27.29110/include\iostream:11:
In file included from C:/Users/Zirian/Desktop/14.27.29110/include\istream:11:
In file included from C:/Users/Zirian/Desktop/14.27.29110/include\ostream:11:
In file included from C:/Users/Zirian/Desktop/14.27.29110/include\ios:11:
In file included from C:/Users/Zirian/Desktop/14.27.29110/include\xlocnum:12:
In file included from C:/Users/Zirian/Desktop/14.27.29110/include\cmath:9:
C:/Users/Zirian/Desktop/14.27.29110/include\yvals.h:12:10: Fatal error: 'crtdbg.h' file not found
#include <crtdbg.h>
         ^~~~~~~~~~
1 warning and 18 errors generated.

示例代码

#include <iostream>

int main()
{
    std::cout << "this is a test" << std::endl;     
    while(1)
    {
        
    }
    return 0;
}

我的程序:

#define _CRT_SECURE_NO_WARNINGS    //disables the "getenv" error

#include "cc1_main.cpp"

int main()
{
    std::vector<const char*> argsX{"-v","-IC:/Users/Zirian/Desktop/14.27.29110/include","-IC:/Users/Zirian/Desktop/um","-std=c++11","-stdlib=libc++","-x","c++","test.cpp" };
        
    if (int res = cc1_main(argsX,"",nullptr))
        exit(-1);

    return 0;
}

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)