[英]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 代碼中根本找不到對它們的引用。
問題:
默認情況下,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_path
了get_shared_dir_root()
#elif defined __ANDROID__
dir_path="/data"
#else
dir_path="/tmp"
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.