2014-01-05 56 views
2

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

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

問題:

然而,當我嘗試創建一個名爲互斥這樣的提升:

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

我得到一個異常說用本機代碼「沒有這樣的文件或目錄」 2.

附加信息:

當我搜索如何使用Android上的共享內存時,它看起來ashmem和Binder是流行的方法,我找不到refe在移植的Boost IPC代碼中完全依賴它們。

問題:

  1. 什麼是對「沒有這樣的文件或目錄」錯誤的原因是什麼?
  2. 有人可以確認Boost-for-Android IPC部分工作嗎?
+0

非常好的問題。我也對此感興趣。你是否嘗試排除權限? (你可以以root身份運行進程嗎?)。也許shmem內核位被保護(或者在最壞的情況下不存在)。 – sehe

+0

該進程以root訪問權限運行。我將檢查共享內存內核位是否存在(但是我的代碼是如何編譯的?)。 –

+0

交叉編譯_implies_,您只需編譯(希望兼容)一組內核頭文件/系統庫。與往常一樣,模塊可能會被列入黑名單,因此在重新啓動時甚至可能會丟失模塊。並想起rmmod – sehe

回答

2

默認情況下,Boost不尋找一個共同的地方在Android上共享數據。它不是以這種方式建造的。爲了使它工作修改文件

/boost/interprocess/detail/os_file_functions.hpp 

查找以下行添加/ SD卡

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

這樣做,使用庫,並且給你的應用程序讀取後/寫外部存儲權限。

你很好走。

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

相關問題