问题描述
我遵循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 (将#修改为@)