c++ - 在 Windows 8.1 上使用 clang-cl 64 位

标签 c++ 64-bit clang inline-assembly clang-cl


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

我从 here 下载了一个预构建的二进制文件 (clang 3.7.0) ,windows 64位版本。

所以我尝试编写我的第一个程序,但遗憾的是它无法编译。相同的代码可以在 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;
}

这是clang-cl.exe输出:

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.

编辑感谢@Martin Bonner,问题是我需要使用#define UNICODE。但现在我还需要在64位上编译。我该怎么做?

最佳答案

您需要#define UNICODE之前#include <windows.h>如果您要将宽字符串传递给类似 MessageBox 的函数

关于c++ - 在 Windows 8.1 上使用 clang-cl 64 位,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34516167/

相关文章:

c# - System.IO.File.Exists() 来自 x86 和 x64 应用程序的不同答案

linux - 是否可以在 64 位架构上将 mongodb 数据库文件从 32 位(操作系统)复制/粘贴到 64 位(操作系统)并继续?

c++ - 我怎样才能初始化这个结构?

c++ - libstdc++ 不识别标准库文字

ios - 在 XCode 上为 iOS 使用自定义构建的 OpenCV 会产生 ___sincos_stret undefined symbol

c++ - 为什么选择的是重载基类值的默认参数值,而不是执行的派生方法中指定的默认值

c++ - 在 solaris 中编译 std::count() 时出错

c++ - Eigen C++ 中的矩阵矩阵

c# - 强制 C# 应用程序在 64 位服务器上以 32 位模式运行