Компиляция подмножества Boost-библиотек для Android NDK - PullRequest
4 голосов
/ 26 ноября 2011

Мне понадобилась одна из библиотек надстроек для моего приложения для Android, поэтому мне удалось собрать большинство из них.Но когда я пытаюсь скомпилировать компонент файловой системы, я получаю следующее сообщение об ошибке:

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

Я понимаю, что это потому, что gcc Android NDK не имеет части, связанной с statvfs.h.

Что мне интересно, так ли необходим компонент файловой системы для boost-spirit?Конечно, если вы знаете, как устранить эту ошибку, это было бы идеально.

1 Ответ

3 голосов
/ 21 февраля 2013

Решение вашей ошибки компиляции

Я не пробовал это с Boost Filesystem, но, вероятно, это будет работать:

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

Если Boost Spirit требуется Boost Filesystem

Согласно инструкции boost это модуль только для заголовка. :)

Почему на андроиде нет statvfs?

Согласно справочной странице 1015 * statvfs предназначен для POSIX, но Linux (и Android основан на Linux) не подчиняется ему. Применяются следующие цитаты:

Некоторые системы имеют только <sys/vfs.h>, другие системы также имеют <sys/statfs.h>, где первая включает в себя последнюю. Так что, кажется, в том числе первое - лучший выбор.

1024 *
*

Solaris, Irix и POSIX имеют системный вызов statvfs (2), который возвращает struct statvfs (определенную в <sys/statvfs.h>), содержащую беззнаковый long f_fsid. Linux, SunOS, HP-UX, 4.4BSD имеют системный вызов statfs (), который возвращает struct statfs (определенную в <sys/vfs.h>), содержащую fsid_t f_fsid, где fsid_t определяется как struct {int val 2 ; }. То же самое относится и к FreeBSD, за исключением того, что он использует включаемый файл <sys/mount.h>.

...