Android中没有哪些最重要的POSIX功能?

时间:2012-08-24 14:44:18

标签: android c++ linux android-ndk posix

我要将一个大型C ++项目(某种类型的Library Project,它完全没有GUI)移植到Android上。它实际上是一个Visual C ++项目,但它将作为中间步骤移植到Linux。我知道Android不是一个“完整的”Linux并且不声称提供所有POSIX功能,但我也知道在Android上使用NDK有很多“POSIXish功能”。

现在我的实际问题是:

与完整的POSIX套装相比,哪些是Android上最不重要/最重要的功能?因此,在从Visual C ++移植到Linux GCC时,我可以牢记这一点。

我试图在谷歌上找到一些东西,但没有发现真正有用的东西,只是在这里和那里提到一些东西提到Android上有一些POSIX功能......

4 个答案:

答案 0 :(得分:3)

Google的重新编码。它很小但是针对Android进行了优化。

我所知道的唯一重要的缺点是pthread_cancel()函数。

我的经验是,如果您将其成功移植到GNU / Linux,而没有pthread_cancel()次调用,那么您应该大部分都可以。

顺便说一下,你想建立什么样的图书馆?它用什么?网络,线程......

PS:即使Linux也不完全是POSIX。

答案 1 :(得分:2)

共享内存也是你在android中可能会发现的不同内容。在尝试使用Android内核上的shm_open和shm_unlink时遭遇重创。 Android实现了异步共享内存(ashmem)。

答案 2 :(得分:2)

仿生维基百科页面

https://en.wikipedia.org/wiki/Bionic_(software)#Differences_from_POSIX

还有一些有趣的信息:

  

尽管bionic的目标是实现所有C11和POSIX,但仍有(从Oreo开始)大约有70个POSIX函数从libc中丢失[8]。还有一些POSIX函数,例如endpwent / getpwent / setpwent系列,它们不适用于Android,因为它缺少passwd数据库。从奥利奥开始,libm已经完成。

     

出于安全原因,某些功能故意不符合POSIX或C标准,例如printf不支持%n格式字符串。[9]

树形文档中的Bionic官方报价

https://android.googlesource.com/platform/bionic/+/37ad9597839c70a7ec79578e5072df9c189fc830/docs/status.md

  

运行./libc/tools/check-symbols-glibc.py in bionic /获取glibc实现的POSIX函数的当前列表,但不是bionic实现的。目前(2017-10):

aio_cancel
aio_error
aio_fsync
aio_read
aio_return
aio_suspend
aio_write
lio_listio
pthread_cancel
pthread_mutex_consistent
pthread_mutex_getprioceiling
pthread_mutex_setprioceiling
pthread_mutexattr_getprioceiling
pthread_mutexattr_getprotocol
pthread_mutexattr_getrobust
pthread_mutexattr_setprioceiling
pthread_mutexattr_setprotocol
pthread_mutexattr_setrobust
pthread_setcancelstate
pthread_setcanceltype
pthread_testcancel
wordexp
wordfree
libm
     

当前的libm符号:https://android.googlesource.com/platform/bionic/+/master/libm/libm.map.txt

     

0剩余POSIX libm函数。

答案 3 :(得分:1)