【问题标题】:Compiling a subset of Boost Libraries for Android NDK为 Android NDK 编译 Boost 库的子集
【发布时间】:2011-11-25 23:53:10
【问题描述】:

我需要一个用于我的 Android 应用的 boost 库,所以我设法编译了其中的大部分。但是当我尝试编译文件系统组件时,我收到以下错误消息。

gcc.compile.c++ bin.v2/libs/filesystem/build/gcc-android4.4.3/release/link-static/runtime-link-static/threading-multi/v2/src/v2_operations.o
libs\filesystem\v2\src\v2_operations.cpp:62:30: 
     error: sys/statvfs.h: No such file or directory

我理解这是因为Android NDK的gcc没有statvfs.h相关的部分。

我想知道的是,文件系统组件是否对于 boost-spirit 是必需的?当然,如果您知道如何解决该错误,那就完美了。

【问题讨论】:

标签: c++ boost android-ndk boost-spirit


【解决方案1】:

解决编译错误

我没有用 Boost Filesystem 尝试过这个,但它可能会工作:

#ifndef ANDROID
  #include <sys/statvfs.h>
#else
  #include <sys/vfs.h>
  #define statvfs statfs
#endif

如果 Boost Spirit 需要 Boost 文件系统

根据boost manual,它是一个仅标头模块。 :)

为什么android没有statvfs?

根据其manpage,statvfs 是针对 POSIX 的,但 Linux(和基于 Linux 的 Android)不服从它。以下引号适用:

有些系统只有&lt;sys/vfs.h&gt;,有些系统也有&lt;sys/statfs.h&gt;,其中前者包含后者。所以似乎包括前者是最好的选择。


Solaris、Irix 和 POSIX 有一个系统调用 statvfs(2),它返回一个包含无符号长 f_fsid 的结构 statvfs(在&lt;sys/statvfs.h&gt; 中定义)。 Linux、SunOS、HP-UX、4.4BSD 有一个系统调用 statfs(),它返回一个包含 fsid_t f_fsid 的 struct statfs(在&lt;sys/vfs.h&gt; 中定义),其中 fsid_t 定义为 struct { int val2; }。 FreeBSD 也是如此,除了它使用包含文件&lt;sys/mount.h&gt;

【讨论】:

    猜你喜欢
    • 2020-04-23
    • 2015-08-10
    • 1970-01-01
    • 1970-01-01
    • 2012-12-28
    • 2013-06-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多