我正在使用NDK将C程序移植到Android上。该程序使用uuid.h
或uuid/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代码模拟这种行为?
提前感谢您的帮助!
答案 0 :(得分:6)
uuid.h
不属于NDK。您可以通过运行find /opt/android-ndk-r8b/ -name uuid.h
您可以从AOSP中提取所需的代码。我在主分支中找到了external/e2fsprogs/lib/uuid/uuid.h
。
答案 1 :(得分:0)
文章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)
here,
getStringFromFile("/proc/sys/kernel/random/uuid")
将返回一个uuid,例如,您可以打印到日志:
D/~~~ ( 5065): uuid=418ebd25-4f6e-4431-b31e-784703ea6093
(在三星GS4上运行)
答案 2 :(得分:0)
我通过选择arbitrary版库并将其编译为静态库来解决。我将所有文件放在文件夹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 ..