我正在使用Android NDK和Cmake来生成我的项目的共享库。
我正在将一个现有的项目从 Ubuntu 移植到 Android,现在我需要移植一些可执行文件。我成功编译了所有需要Threads
库的可执行文件 sexecpt 一个。
在CMakeList.txt中,有FIND_PACKAGE(Threads)
在为Ubuntu编译时查找库,但不能为Android编译。
我遵循了这个cmake和libpthread,但没有成功。
我想我应该编写FindThread.cmake
文件,但我对 CMake 很陌生,真的不知道该怎么做,特别是因为我不知道 Android 线程库的位置。
任何帮助将不胜感激。谢谢
下,不需要FIND_PACKAGE(Threads)
,因为 Android libc 标准库(称为"仿生")已经包含了 threads.h
和 pthread.h
中的相关功能。该支持尚未完全符合 POSIX 标准,并且因 API 级别而异,但在大多数情况下已经足够了。
因此,您可以跳过查找和链接到外部线程库。如果您的 CMake 文件用于跨平台使用,它将如下所示:
set(CMAKE_THREAD_PREFER_PTHREAD TRUE)
set(THREADS_PREFER_PTHREAD_FLAG TRUE)
if(NOT CMAKE_SYSTEM_NAME STREQUAL "Android")
find_package(Threads REQUIRED)
target_link_libraries (your-target-name PRIVATE Threads::Threads)
endif()
你不需要编写自己的FindThread.cmake。在标准的 Linux 安装中,它可以在/usr/share/cmake-2.8/Modules/中找到。
检查此模块/目录可能安装在您的平台上的位置。