首页 > 解决方案 > 在 C++ 中调用 mmap,使用 Clang 编译

问题描述

我正在尝试在 C++ 中使用 mmap 分配内存并使用 Clang/Clang++ 进行编译,但是当我编译我的代码时出现错误。编码:

// test.cpp
#include <stdio.h>
#include <stdlib.h>
#include <sys/mman.h>

int main() {
    int *a = static_cast<int*>(mmap(0x20000, sizeof(int), PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0));
    *a = 13;
    return 0;
}

错误:

test.cpp:6:29: error: no matching function for call to 'mmap'
    int *a = static_cast<int*>(mmap(0x20000, sizeof(int), PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0));
                               ^~~~
/usr/include/x86_64-linux-gnu/sys/mman.h:57:14: note: candidate function   not viable: no known conversion from 'int' to 'void *' for 1st argument
extern void *mmap (void *__addr, size_t __len, int __prot,
         ^
1 error generated.

使用 Clang 或 Clang++ 编译会产生相同的错误。有谁知道在 C++ 中调用 mmap 的正确方法?如果它是 *.c 文件,完全相同的程序可以正常工作。

编辑:我的意思是在 *.c 版本中,我删除了静态演员表,它会起作用。

标签: c++clangmmapclang++

解决方案


推荐阅读