Intereting Posts
Как работает указатель на массив? Как передать длинный длинный типизированный параметр при вызове функции c из узла руки? Можем ли мы использовать va_arg с объединениями? Является char * envp в качестве третьего аргумента main () portable Отделите двойное в знаке, экспоненте и мантиссе Чтение файла с использованием fgets и печать его содержимого на экране Первое и последнее вхождение для двоичного поиска в C Что происходит с побитовым сдвигом для всех 8 бит Сколько элементов заполнено в массиве C Как я могу предотвратить, чтобы дочерний процесс НЕ стал зомби, если родительский выход inet_aton () возвращает успех для неверных IP-адресов? Декартовая топология MPI: MPI_Neighbor_alltoall неверные полученные данные Преобразование из индексов на основе источника в индексы на основе назначений Как я должен использовать cvReshape? Сравнение сравнений указателей с разными объектами

Включите uuid.h в проект Android NDK

Я портирую C-программу на Android с помощью NDK. Программа использует uuid.h или uuid/uuid.h зависимости от того, какая из них доступна. Когда я компилирую программу, выдает сообщение об ошибке uuid.h: No such file or directory .

Я новичок в NDK, поэтому я не совсем уверен, в чем проблема. Я использую cygwin для Windows; на компьютере нет библиотеки uuid.h или Android, не поддерживает его? Есть ли обходной путь – могу ли я каким-либо образом включить его в настройки компилятора?

Наконец, программа использует только библиотеку:

 char *s; uuid_t uu; uuid_create(&uu, NULL); uuid_to_string(&uu, &s, 0); 

Возможно, я смогу подражать этому поведению со своим собственным C-кодом?

Спасибо за любую помощь заранее!

    uuid.h не является частью NDK. Вы можете проверить, запустив find /opt/android-ndk-r8b/ -name uuid.h

    Вероятно, вы можете извлечь код из AOSP. Я нашел external/e2fsprogs/lib/uuid/uuid.h в главной ветке.

    Статья UUID и Linux: все, что вам нужно знать, предполагает использование

     $ cat /proc/sys/kernel/random/uuid eaf3a162-d770-4ec9-a819-ec96d429ea9f 

    Команда действительно работает в Android, хотя ваша программа должна будет прочитать этот файл ( /proc/sys/kernel/random/uuid ), а не вызвать библиотеку.

    Итак, если вы берете String getStringFromFile(String filePath) здесь ,

     getStringFromFile("/proc/sys/kernel/random/uuid") 

    вернет uuid, который вы можете, например, распечатать в журнале:

     D/~~~ ( 5065): uuid=418ebd25-4f6e-4431-b31e-784703ea6093 

    (запускал его на Samsung GS4)

    Я решил, выбирая произвольную версию библиотеки и компилируя ее как статическую библиотеку. Я поместил все файлы в папку в каталог с именем uuid . Затем во внешний каталог я добавил следующий CMakeLists.txt :

     cmake_minimum_required(VERSION 3.8) project(uuid) set(CMAKE_INCLUDE_CURRENT_DIR ON) set (SOURCE_FILES uuid/clear.c uuid/compare.c uuid/copy.c uuid/gen_uuid.c uuid/isnull.c uuid/pack.c uuid/parse.c uuid/unpack.c uuid/unparse.c uuid/uuid_time.c ) add_definitions( -DHAVE_INTTYPES_H -DHAVE_UNISTD_H -DHAVE_ERRNO_H -DHAVE_NETINET_IN_H -DHAVE_SYS_IOCTL_H -DHAVE_SYS_MMAN_H -DHAVE_SYS_MOUNT_H -DHAVE_SYS_PRCTL_H -DHAVE_SYS_RESOURCE_H -DHAVE_SYS_SELECT_H -DHAVE_SYS_STAT_H -DHAVE_SYS_TYPES_H -DHAVE_STDLIB_H -DHAVE_STRDUP -DHAVE_MMAP -DHAVE_UTIME_H -DHAVE_GETPAGESIZE -DHAVE_LSEEK64 -DHAVE_LSEEK64_PROTOTYPE -DHAVE_EXT2_IOCTLS -DHAVE_LINUX_FD_H -DHAVE_TYPE_SSIZE_T -DHAVE_SYS_TIME_H -DHAVE_SYS_PARAM_H -DHAVE_SYSCONF ) add_library(uuid STATIC ${SOURCE_FILES}) install(TARGETS uuid DESTINATION lib) 

    Наконец, я постарался настроить NDK на следующий вызов cmake:

     mkdir -p build-android-arm cd build-android-arm cmake ANDROID_ARGS="-DCMAKE_BUILD_TYPE=Release \ -DCMAKE_TOOLCHAIN_FILE=/opt/android-ndk/build/cmake/android.toolchain.cmake \ -DANDROID_NDK=/opt/android-ndk \ -DANDROID_NATIVE_API_LEVEL=23 \ -DANDROID_TOOLCHAIN=clang" \ -DANDROID_ABI=armeabi-v7a ..