C++ 在windows 8.1上使用64位clang

C++ 在windows 8.1上使用64位clang,c++,64-bit,clang,inline-assembly,clang-cl,C++,64 Bit,Clang,Inline Assembly,Clang Cl,我刚开始在windows上使用clang cl,因为我需要在64位应用程序中使用内联汇编,而Visual Studio 2015不支持这一点,所以我被告知使用clang-cl 我从windows 64位版本下载了一个预构建的二进制文件(Clang3.7.0) 所以我试着编写我的第一个程序,但遗憾的是它无法编译。同样的代码在Visual Studio 2015上编译(汇编语句除外)。 请帮助 这是我在admin cmd中使用的命令(在这之前我在上面运行了vsvart32) clang-cl.exe


我刚开始在windows上使用clang cl,因为我需要在64位应用程序中使用内联汇编,而Visual Studio 2015不支持这一点,所以我被告知使用clang-cl

我从windows 64位版本下载了一个预构建的二进制文件(Clang3.7.0)

所以我试着编写我的第一个程序,但遗憾的是它无法编译。同样的代码在Visual Studio 2015上编译(汇编语句除外)。

请帮助

这是我在admin cmd中使用的命令(在这之前我在上面运行了
vsvart32

clang-cl.exe-m64 C:\test\Source.cpp


这是我的密码:

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

int main() {

    int a = 0;
    if(0)//this if-else is to mess up disassmblers
        __asm __emit 0xE8 //only this line doesn't go on VS2015
    else
    a=3;

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

编辑感谢@Martin Bonner,问题是我需要使用
#定义UNICODE
。但现在我还需要在64位上编译。如何做到这一点?

如果要将宽字符串传递给像
MessageBox
这样的函数,您需要在
之前定义UNICODE
!但是现在我得到了这个错误:
libcmt.lib(typinfo.obj):致命错误LNK1112:模块计算机类型“X86”与目标计算机类型“x64”clang-cl.exe冲突:错误:linker命令失败,退出代码为1112(在职业中使用-v查看)
您需要将链接器指向64位库,但这需要另一个问题(我不知道这个问题的答案。对不起。)不要试图延伸这个问题。这个问题已经得到了回答。再问一个问题
C:\Program Files\LLVM\bin>clang-cl.exe -m64 C:\test\Source.cpp
C:\test\Source.cpp(13,2) :  error: no matching function for call to
  'MessageBoxA'
    MessageBox(
    ^~~~~~~~~~
C:\Program Files (x86)\Windows Kits\8.1\include\um\winuser.h(8705,21) :       note:
  expanded from macro 'MessageBox'
#define MessageBox  MessageBoxA
                ^~~~~~~~~~~
C:\Program Files (x86)\Windows Kits\8.1\include\um\winuser.h(8689,1) :  note:
  candidate function not viable: no known conversion from 'LPCWSTR'
  (aka 'const wchar_t *') to 'LPCSTR' (aka 'const char *') for 2nd argument
MessageBoxA(
^
1 error generated.