Windows 8.1上的clang cl编译错误
clang-cl on Windows 8.1 compiling error
我刚开始在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 FilesLLVMbin>"C:Program FilesLLVMbinclang-cl.exe" "C:UsersDav
idSourceReposDY Obfuscator 2015-20162DY ObfuscatorSource.cpp"
在VS2015中编译工作正常,但我无法在命令行上编译,因为我收到了以下错误:
C:Program FilesLLVMbin>"C:Program FilesLLVMbinclang-cl.exe" C:testSourc
e.cpp
In file included from C:testSource.cpp:3:
In file included from C:Program Files (x86)Microsoft Visual Studio 14.0VCINC
LUDEiostream:6:
In file included from C:Program Files (x86)Microsoft Visual Studio 14.0VCINC
LUDEistream:6:
In file included from C:Program Files (x86)Microsoft Visual Studio 14.0VCINC
LUDEostream:6:
In file included from C:Program Files (x86)Microsoft Visual Studio 14.0VCINC
LUDEios:6:
In file included from C:Program Files (x86)Microsoft Visual Studio 14.0VCINC
LUDExlocnum:7:
In file included from C:Program Files (x86)Microsoft Visual Studio 14.0VCINC
LUDEcmath:656:
In file included from C:Program Files (x86)Microsoft Visual Studio 14.0VCINC
LUDExtgmath.h:8:
C:Program Files (x86)Microsoft Visual Studio 14.0VCINCLUDExtr1common(207,22
) : error:
use of undeclared identifier 'char16_t'
struct _Is_integral<char16_t>
^
C:Program Files (x86)Microsoft Visual Studio 14.0VCINCLUDExtr1common(213,22
) : error:
use of undeclared identifier 'char32_t'
struct _Is_integral<char32_t>
^
In file included from C:testSource.cpp:3:
In file included from C:Program Files (x86)Microsoft Visual Studio 14.0VCINC
LUDEiostream:6:
In file included from C:Program Files (x86)Microsoft Visual Studio 14.0VCINC
LUDEistream:6:
In file included from C:Program Files (x86)Microsoft Visual Studio 14.0VCINC
LUDEostream:6:
In file included from C:Program Files (x86)Microsoft Visual Studio 14.0VCINC
LUDEios:6:
In file included from C:Program Files (x86)Microsoft Visual Studio 14.0VCINC
LUDExlocnum:10:
In file included from C:Program Files (x86)Microsoft Visual Studio 14.0VCINC
LUDEstreambuf:6:
In file included from C:Program Files (x86)Microsoft Visual Studio 14.0VCINC
LUDExiosbase:6:
In file included from C:Program Files (x86)Microsoft Visual Studio 14.0VCINC
LUDExlocale:8:
In file included from C:Program Files (x86)Microsoft Visual Studio 14.0VCINC
LUDEstdexcept:6:
In file included from C:Program Files (x86)Microsoft Visual Studio 14.0VCINC
LUDEexception:7:
In file included from C:Program Files (x86)Microsoft Visual Studio 14.0VCINC
LUDEtype_traits:6:
C:Program Files (x86)Microsoft Visual Studio 14.0VCINCLUDExstddef(405,14) :
error:
use of undeclared identifier 'char16_t'
struct hash<char16_t>
^
C:Program Files (x86)Microsoft Visual Studio 14.0VCINCLUDExstddef(411,14) :
error:
use of undeclared identifier 'char32_t'
struct hash<char32_t>
^
In file included from C:testSource.cpp:3:
In file included from C:Program Files (x86)Microsoft Visual Studio 14.0VCINC
LUDEiostream:6:
In file included from C:Program Files (x86)Microsoft Visual Studio 14.0VCINC
LUDEistream:6:
In file included from C:Program Files (x86)Microsoft Visual Studio 14.0VCINC
LUDEostream:6:
In file included from C:Program Files (x86)Microsoft Visual Studio 14.0VCINC
LUDEios:6:
In file included from C:Program Files (x86)Microsoft Visual Studio 14.0VCINC
LUDExlocnum:10:
In file included from C:Program Files (x86)Microsoft Visual Studio 14.0VCINC
LUDEstreambuf:6:
In file included from C:Program Files (x86)Microsoft Visual Studio 14.0VCINC
LUDExiosbase:6:
In file included from C:Program Files (x86)Microsoft Visual Studio 14.0VCINC
LUDExlocale:8:
In file included from C:Program Files (x86)Microsoft Visual Studio 14.0VCINC
LUDEstdexcept:7:
In file included from C:Program Files (x86)Microsoft Visual Studio 14.0VCINC
LUDExstring:6:
In file included from C:Program Files (x86)Microsoft Visual Studio 14.0VCINC
LUDExmemory0:8:
C:Program Files (x86)Microsoft Visual Studio 14.0VCINCLUDElimits(611,33) :
error:
use of undeclared identifier 'char16_t'
template<> class numeric_limits<char16_t>
^
C:Program Files (x86)Microsoft Visual Studio 14.0VCINCLUDElimits(901,33) :
error:
use of undeclared identifier 'char32_t'
template<> class numeric_limits<char32_t>
^
In file included from C:testSource.cpp:3:
In file included from C:Program Files (x86)Microsoft Visual Studio 14.0VCINC
LUDEiostream:6:
In file included from C:Program Files (x86)Microsoft Visual Studio 14.0VCINC
LUDEistream:6:
In file included from C:Program Files (x86)Microsoft Visual Studio 14.0VCINC
LUDEostream:6:
In file included from C:Program Files (x86)Microsoft Visual Studio 14.0VCINC
LUDEios:6:
In file included from C:Program Files (x86)Microsoft Visual Studio 14.0VCINC
LUDExlocnum:10:
In file included from C:Program Files (x86)Microsoft Visual Studio 14.0VCINC
LUDEstreambuf:6:
In file included from C:Program Files (x86)Microsoft Visual Studio 14.0VCINC
LUDExiosbase:6:
In file included from C:Program Files (x86)Microsoft Visual Studio 14.0VCINC
LUDExlocale:8:
In file included from C:Program Files (x86)Microsoft Visual Studio 14.0VCINC
LUDEstdexcept:7:
In file included from C:Program Files (x86)Microsoft Visual Studio 14.0VCINC
LUDExstring:6:
In file included from C:Program Files (x86)Microsoft Visual Studio 14.0VCINC
LUDExmemory0:10:
In file included from C:Program Files (x86)Microsoft Visual Studio 14.0VCINC
LUDExutility:8:
In file included from C:Program Files (x86)Microsoft Visual Studio 14.0VCINC
LUDEutility:7:
C:Program Files (x86)Microsoft Visual Studio 14.0VCINCLUDEiosfwd(267,21) :
error:
use of undeclared identifier 'char16_t'
struct char_traits<char16_t>
^
C:Program Files (x86)Microsoft Visual Studio 14.0VCINCLUDEiosfwd(276,21) :
error:
use of undeclared identifier 'char32_t'
struct char_traits<char32_t>
^
In file included from C:testSource.cpp:3:
In file included from C:Program Files (x86)Microsoft Visual Studio 14.0VCINC
LUDEiostream:6:
In file included from C:Program Files (x86)Microsoft Visual Studio 14.0VCINC
LUDEistream:6:
In file included from C:Program Files (x86)Microsoft Visual Studio 14.0VCINC
LUDEostream:6:
In file included from C:Program Files (x86)Microsoft Visual Studio 14.0VCINC
LUDEios:6:
In file included from C:Program Files (x86)Microsoft Visual Studio 14.0VCINC
LUDExlocnum:10:
In file included from C:Program Files (x86)Microsoft Visual Studio 14.0VCINC
LUDEstreambuf:6:
In file included from C:Program Files (x86)Microsoft Visual Studio 14.0VCINC
LUDExiosbase:6:
In file included from C:Program Files (x86)Microsoft Visual Studio 14.0VCINC
LUDExlocale:8:
In file included from C:Program Files (x86)Microsoft Visual Studio 14.0VCINC
LUDEstdexcept:7:
C:Program Files (x86)Microsoft Visual Studio 14.0VCINCLUDExstring(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.0VCINCLUDExstring(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.0VCINCLUDExstring(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.0VCINCLUDExstring(2625,53)
: error:
expected unqualified-id
typedef basic_string<char32_t, char_traits<char32_t>, allocator<char32_t> >
^
In file included from C:testSource.cpp:3:
In file included from C:Program Files (x86)Microsoft Visual Studio 14.0VCINC
LUDEiostream:6:
In file included from C:Program Files (x86)Microsoft Visual Studio 14.0VCINC
LUDEistream:6:
In file included from C:Program Files (x86)Microsoft Visual Studio 14.0VCINC
LUDEostream:6:
In file included from C:Program Files (x86)Microsoft Visual Studio 14.0VCINC
LUDEios:6:
In file included from C:Program Files (x86)Microsoft Visual Studio 14.0VCINC
LUDExlocnum:10:
In file included from C:Program Files (x86)Microsoft Visual Studio 14.0VCINC
LUDEstreambuf:6:
In file included from C:Program Files (x86)Microsoft Visual Studio 14.0VCINC
LUDExiosbase:6:
C:Program Files (x86)Microsoft Visual Studio 14.0VCINCLUDExlocale(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.0VCINCLUDExlocale(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
Reid Klecker在回复Clang错误报告#24231时解释了为什么这是必要的:
"在〔Visual Studio〕2015中,
char16_t
成为内置类型。以前,它不能内置,因为2013在它们的标头中定义了它。默认情况下,Clang尝试与2013兼容。要实现2015年目标,请将[-fms-compatibility-version=19
]传递给clang-cl
。参数可以是cl /?
吐出的整个版本号。"
所以我的最后命令是(包括一般的libs):
clang-cl.exe "C:testSource.cpp" -fms-compatibility-version=19.00 ^
-Fe"C:testSource.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"
相关文章:
- 当我编译webrtc服务器时,Windows上只支持clang-cl
- MSYS2 MinGW64 在 Windows 上构建 GMP/MPFR 作为静态库,并将它们链接到使用 CL 编译的
- 如何在 Azure 应用服务中使用 cl.exe 编译 C++ 代码并生成可执行文件
- CMake 和 Visual Studio 2015 - C 编译器 cl.exe 无法编译简单的测试程序
- 如何阻止 cmake 使用 cl 编译?
- GCC 和 clang 抛出"no matching function call"但 msvc (cl) 按预期编译和工作
- G++ 和 CL(VS2017) 都编译成功,但 cl 编译的可执行文件运行异常
- CL.EXE无法编译简单的测试程序VS2017
- 使用不同工具集使用Cl.EXE编译
- cpp文件不使用cl编译,但在Visual Studio中编译得很好
- Windows 8.1上的clang cl编译错误
- 编译一个基本的openCL程序错误:cl.hpp中未解析的includes
- 使用Visual c++ Express 2010 IDE编译和使用cl命令在控制台下编译时,exe大小不同
- 命令行编译使用cl.exe
- 使用 VS5 编译 CUDA 2012 时出现错误"nvcc cannot find a supported cl version"
- 我应该使用哪些编译选项来使用cl.exe与Boost链接
- Visual Studio 2010 - MS C++ (CL) 编译的可执行文件在 Windows 2000 上不起作
- 如何将OpenCL内核文件(.cl)编译为llvm IR文件
- VS2015的多处理器编译在运行cl时会产生"not enough quota is available to process this command".exe
- 从MVS 2013编译带有OMIT选项的cl.exe时,sqlite3错误