4

*nix から Android へのライブラリの移植に取り組んでおり、ライブラリは共有メモリまたはshm. Android には System V がありませんshm。代わりに を使用しますashmem

shm呼び出しをマップする shim ライブラリを知っている人はいashmemますか? Google はあまり役に立ちませんでした。

4

2 に答える 2

3

これは、移植の同様の問題に取り組んでいるときに、私にとってどのように機能したかです。

ファイル記述子の作成と取得に 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);

記述子を返すネイティブ関数を使用して、ネイティブ コードから Java コードに base_address を渡すことができます。

Android には、MemoryFile という名前の Ashmem のラッパー クラスがあります。そちらもご覧いただけます。

次のリンクは、独自のラッパーを作成するのに役立ちました。

于 2013-09-23T18:24:41.543 に答える
3

これは、Android ashmem (shmget/shmat/shmdt/shmctl 呼び出し) を使用して LD_PRELOAD を実行して Linux 共有メモリをシミュレートできるライブラリです。このライブラリに直接リンクすることもできます。

https://github.com/pelya/android-shmem

于 2014-04-29T13:14:05.947 に答える