gpt4 book ai didi

c++ - Windows 8.1 上的 clang-cl 编译错误

转载 作者:可可西里 更新时间:2023-11-01 09:44:41 25 4
gpt4 key购买 nike

我刚开始在 Windows 上使用 clang-cl 3.7。我试图通过 Visual Studio 2015 和命令行在我的 WIN8.1 机器上编译我的代码。不用说,在此之前,在同一个 cmd 中,我使用 amd64 选项运行了 vsvarsall

这是我的代码:

#define UNICODE
#include <Windows.h>
#include <iostream>

int main() {

int a = 0;
if(0)
__asm _emit 0xE8
else
a=3;

if (IsDebuggerPresent())
MessageBox(
NULL,
(LPCWSTR)L"Debugger detected!!",
(LPCWSTR)L"!!!!!",
MB_ICONWARNING | MB_CANCELTRYCONTINUE | MB_DEFBUTTON2
);
return 0;
}

这是我在命令行中输入的内容:

C:\Program Files\LLVM\bin>"C:\Program Files\LLVM\bin\clang-cl.exe"     "C:\Users\Dav
id\Source\Repos\DY Obfuscator 2015-20162\DY Obfuscator\Source.cpp"

在 VS2015 中编译工作正常,但我无法在命令行上编译,因为出现此错误:

C:\Program Files\LLVM\bin>"C:\Program Files\LLVM\bin\clang-cl.exe"    C:\test\Sourc
e.cpp
In file included from C:\test\Source.cpp:3:
In file included from C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\INC
LUDE\iostream:6:
In file included from C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\INC
LUDE\istream:6:
In file included from C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\INC
LUDE\ostream:6:
In file included from C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\INC
LUDE\ios:6:
In file included from C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\INC
LUDE\xlocnum:7:
In file included from C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\INC
LUDE\cmath:656:
In file included from C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\INC
LUDE\xtgmath.h:8:
C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\INCLUDE\xtr1common(207,22
) : error:
use of undeclared identifier 'char16_t'
struct _Is_integral<char16_t>
^
C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\INCLUDE\xtr1common(213,22
) : error:
use of undeclared identifier 'char32_t'
struct _Is_integral<char32_t>
^
In file included from C:\test\Source.cpp:3:
In file included from C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\INC
LUDE\iostream:6:
In file included from C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\INC
LUDE\istream:6:
In file included from C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\INC
LUDE\ostream:6:
In file included from C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\INC
LUDE\ios:6:
In file included from C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\INC
LUDE\xlocnum:10:
In file included from C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\INC
LUDE\streambuf:6:
In file included from C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\INC
LUDE\xiosbase:6:
In file included from C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\INC
LUDE\xlocale:8:
In file included from C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\INC
LUDE\stdexcept:6:
In file included from C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\INC
LUDE\exception:7:
In file included from C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\INC
LUDE\type_traits:6:
C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\INCLUDE\xstddef(405,14) :
error:
use of undeclared identifier 'char16_t'
struct hash<char16_t>
^
C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\INCLUDE\xstddef(411,14) :
error:
use of undeclared identifier 'char32_t'
struct hash<char32_t>
^
In file included from C:\test\Source.cpp:3:
In file included from C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\INC
LUDE\iostream:6:
In file included from C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\INC
LUDE\istream:6:
In file included from C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\INC
LUDE\ostream:6:
In file included from C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\INC
LUDE\ios:6:
In file included from C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\INC
LUDE\xlocnum:10:
In file included from C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\INC
LUDE\streambuf:6:
In file included from C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\INC
LUDE\xiosbase:6:
In file included from C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\INC
LUDE\xlocale:8:
In file included from C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\INC
LUDE\stdexcept:7:
In file included from C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\INC
LUDE\xstring:6:
In file included from C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\INC
LUDE\xmemory0:8:
C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\INCLUDE\limits(611,33) :
error:
use of undeclared identifier 'char16_t'
template<> class numeric_limits<char16_t>
^
C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\INCLUDE\limits(901,33) :
error:
use of undeclared identifier 'char32_t'
template<> class numeric_limits<char32_t>
^
In file included from C:\test\Source.cpp:3:
In file included from C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\INC
LUDE\iostream:6:
In file included from C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\INC
LUDE\istream:6:
In file included from C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\INC
LUDE\ostream:6:
In file included from C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\INC
LUDE\ios:6:
In file included from C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\INC
LUDE\xlocnum:10:
In file included from C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\INC
LUDE\streambuf:6:
In file included from C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\INC
LUDE\xiosbase:6:
In file included from C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\INC
LUDE\xlocale:8:
In file included from C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\INC
LUDE\stdexcept:7:
In file included from C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\INC
LUDE\xstring:6:
In file included from C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\INC
LUDE\xmemory0:10:
In file included from C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\INC
LUDE\xutility:8:
In file included from C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\INC
LUDE\utility:7:
C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\INCLUDE\iosfwd(267,21) :
error:
use of undeclared identifier 'char16_t'
struct char_traits<char16_t>
^
C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\INCLUDE\iosfwd(276,21) :
error:
use of undeclared identifier 'char32_t'
struct char_traits<char32_t>
^
In file included from C:\test\Source.cpp:3:
In file included from C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\INC
LUDE\iostream:6:
In file included from C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\INC
LUDE\istream:6:
In file included from C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\INC
LUDE\ostream:6:
In file included from C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\INC
LUDE\ios:6:
In file included from C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\INC
LUDE\xlocnum:10:
In file included from C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\INC
LUDE\streambuf:6:
In file included from C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\INC
LUDE\xiosbase:6:
In file included from C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\INC
LUDE\xlocale:8:
In file included from C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\INC
LUDE\stdexcept:7:
C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\INCLUDE\xstring(2623,22)
: error:
use of undeclared identifier 'char16_t'
typedef basic_string<char16_t, char_traits<char16_t>, allocator<char16_t> >
^
C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\INCLUDE\xstring(2623,53)
: error:
expected unqualified-id
typedef basic_string<char16_t, char_traits<char16_t>, allocator<char16_t> >
^
C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\INCLUDE\xstring(2625,22)
: error:
use of undeclared identifier 'char32_t'
typedef basic_string<char32_t, char_traits<char32_t>, allocator<char32_t> >
^
C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\INCLUDE\xstring(2625,53)
: error:
expected unqualified-id
typedef basic_string<char32_t, char_traits<char32_t>, allocator<char32_t> >
^
In file included from C:\test\Source.cpp:3:
In file included from C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\INC
LUDE\iostream:6:
In file included from C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\INC
LUDE\istream:6:
In file included from C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\INC
LUDE\ostream:6:
In file included from C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\INC
LUDE\ios:6:
In file included from C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\INC
LUDE\xlocnum:10:
In file included from C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\INC
LUDE\streambuf:6:
In file included from C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\INC
LUDE\xiosbase:6:
C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\INCLUDE\xlocale(1004,30)
: error:
use of undeclared identifier 'char16_t'
class _CRTIMP2_PURE codecvt<char16_t, char, _Mbstatet>
^
C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\INCLUDE\xlocale(1328,30)
: error:
use of undeclared identifier 'char32_t'
class _CRTIMP2_PURE codecvt<char32_t, char, _Mbstatet>
^
14 errors generated.

最佳答案

我终于发现我需要在命令行中添加以下内容:

-fms-compatibility-version=19.00

在对 Clang bug report #24231 的回复中, Reid Klecker 解释了为什么这是必要的:

"In [Visual Studio] 2015, char16_t became a builtin type. Previously, it could not be builtin because 2013 defines it in their headers. By default, Clang tries to be compatible with 2013. To target 2015, pass [-fms-compatibility-version=19] to clang-cl. The argument can be the whole version number that cl /? spits out."

所以我的最终命令是(包括通用库):

clang-cl.exe "C:\test\Source.cpp" -fms-compatibility-version=19.00 ^
-Fe"C:\test\Source.exe" "kernel32.lib" "user32.lib" "gdi32.lib" "winspool.lib" ^
"comdlg32.lib" "advapi32.lib" "shell32.lib" "ole32.lib" "oleaut32.lib" "uuid.lib" ^
"odbc32.lib" "odbccp32.lib"

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

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