5

我正在使用 NDK 将 C 程序移植到 Android 上。该程序使用uuid.huuid/uuid.h库取决于哪个可用。当我编译程序时,给出错误消息uuid.h: No such file or directory

我是 NDK 的新手,所以我不完全确定问题出在哪里。我在 Windows 上使用 cygwin;电脑没有uuid.h库还是安卓不支持?是否有解决方法-我可以以某种方式将其包含在编译器设置中吗?

最后,程序只使用这样的库:

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

也许我可以用我自己的 C 代码来模拟这种行为?

提前感谢您的帮助!

4

3 回答 3

7

uuid.h不是 NDK 的一部分。您可以通过运行检查find /opt/android-ndk-r8b/ -name uuid.h

您可能可以从 AOSP 中提取您需要的代码。我external/e2fsprogs/lib/uuid/uuid.h在master分支中找到了。

于 2012-08-09T17:08:12.947 回答
2

我通过选择任意版本的库并将其编译为静态库来解决。我将文件夹中的所有文件放在一个名为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 ..
于 2018-08-03T19:48:25.653 回答
1

文章UUIDs and Linux: Everything you ever need to know 建议使用

$ 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 上运行)

于 2014-07-15T09:06:11.783 回答