我正在开发从 *nix 到 Android 的库端口,该库使用共享内存或shm
. Android 没有 System V shm
。相反,它使用ashmem
.
shm
有人知道将调用映射到 shim 库ashmem
吗?谷歌并不是很有帮助。
我正在开发从 *nix 到 Android 的库端口,该库使用共享内存或shm
. Android 没有 System V shm
。相反,它使用ashmem
.
shm
有人知道将调用映射到 shim 库ashmem
吗?谷歌并不是很有帮助。
这就是我在处理类似的移植问题时的工作方式:
我没有使用 shmfd = open(SHM_PATH, O_RDWR) 来创建和获取文件描述符,而是将其替换为
int fd = ashmem_create_region("SharedRegionName", size);
并使用文件描述符获取基地址:
int base_address = mmap(NULL, size, PROT_READ | PROT_WRITE, MAP_SHARED, fd, 0);
您可以使用返回描述符的本机函数将 base_address 从本机代码传递给您的 java 代码。
Android 有一个名为 MemoryFile 的 Ashmem 包装类。你也可以看看那个。
以下链接帮助我创建了自己的包装器:
这是一个库,你可以LD_PRELOAD来模拟Linux共享内存使用Android ashmem(shmget/shmat/shmdt/shmctl调用),你也可以直接链接到这个库。