CMake : FIND_PACKAGE(Threads) for Android 交叉编译



我正在使用Android NDK和Cmake来生成我的项目的共享库。

我正在将一个现有的项目从 Ubuntu 移植到 Android,现在我需要移植一些可执行文件。我成功编译了所有需要Threads库的可执行文件 sexecpt 一个。

在CMakeList.txt中,有FIND_PACKAGE(Threads)在为Ubuntu编译时查找库,但不能为Android编译。

我遵循了这个cmake和libpthread,但没有成功。

我想我应该编写FindThread.cmake文件,但我对 CMake 很陌生,真的不知道该怎么做,特别是因为我不知道 Android 线程库的位置。

任何帮助将不胜感激。谢谢

在 Android

下,不需要FIND_PACKAGE(Threads),因为 Android libc 标准库(称为"仿生")已经包含了 threads.hpthread.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/中找到。

检查此模块/目录可能安装在您的平台上的位置。

最新更新