簡體   English   中英

將uuid.h包含到Android NDK項目中

[英]Include uuid.h into Android NDK project

我正在使用NDK將C程序移植到Android上。 該程序使用uuid.huuid/uuid.h庫,具體取決於可用的庫。 當我編譯程序時,給出錯誤消息uuid.h: No such file or directory

我是NDK的新手,所以我不確定是什么問題。 我在Windows上使用cygwin; 計算機沒有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中提取所需的代碼。 我在master分支中找到了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

(在三星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 ..

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM