簡體   English   中英

使用 Boost.Interprocess 的 Android C++ IPC - 它應該工作嗎?

[英]Android C++ IPC using Boost.Interprocess - should it work?

背景:

我在 linux 上有使用 Boost IPC 訪問共享內存的 C++ 代碼,我想將它移植到 android。 我在這里下載並構建了 Boost-for-Android 項目: https : //github.com/MysticTreeGames/Boost-for-Android

問題:

但是,當我嘗試創建一個名為 mutex 的 boost 時:

boost::interprocess::named_mutex named_mtx(boost::interprocess::open_or_create, "my_mutex");

我收到一個異常,說“沒有這樣的文件或目錄”,本機代碼為 2。

附加信息:

當我搜索如何在 android 上使用共享內存時,看起來 ashmem 和 Binder 是流行的方法,我在移植的 Boost IPC 代碼中根本找不到對它們的引用。

問題:

  1. “沒有這樣的文件或目錄”錯誤的原因是什么?
  2. 有人可以確認 Boost-for-Android IPC 部分有效嗎?

默認情況下,Boost 不會尋找在 Android 上共享數據的公共場所。 它不是這樣建造的。 要使其工作,請修改文件

    /boost/interprocess/detail/os_file_functions.hpp

找到以下行並添加 /sdcard

    const char *names[]={ "/sdcard", ......

之后使用該庫並授予您的應用程序讀/寫外部存儲權限。

你很高興去。

PD:請小心。 我在 Android 中使用互斥鎖和條件變量時遇到問題,因為該進程占用了 100% 的 CPU。

我按照@user3645767 提供的方式進行操作,但沒有奏效。 但是我通過修改文件'interprocess/detail/shared_dir_helpers.hpp'第 109 行來更改get_shared_dir_root()dir_pathget_shared_dir_root()

#elif defined __ANDROID__
    dir_path="/data"
#else
    dir_path="/tmp"

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM