CMake:FIND_包(线程)用于Android交叉编译

CMake:FIND_包(线程)用于Android交叉编译,android,pthreads,cmake,android-ndk,Android,Pthreads,Cmake,Android Ndk,我正在使用Android NDK和Cmake生成我的项目的共享库 我正在将一个现有项目从Ubuntu移植到Android,现在我需要移植一些可执行文件。我成功编译了所有需要Threads库的可执行文件sexecpt-one 在CMakeList.txt中,有一个FIND_-PACKAGE(Threads),它在为Ubuntu而不是Android编译时查找库 我遵循这一点,但没有成功 我认为我应该编写FindThread.cmake文件,但我对cmake还很陌生,不知道如何编写,尤其是我不知道An

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

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

在CMakeList.txt中,有一个
FIND_-PACKAGE(Threads)
,它在为Ubuntu而不是Android编译时查找库

我遵循这一点,但没有成功

我认为我应该编写
FindThread.cmake
文件,但我对cmake还很陌生,不知道如何编写,尤其是我不知道Android的线程库在哪里

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

您不需要编写自己的FindThread.cmake。在标准linux安装中,可以在/usr/share/cmake-2.8/Modules/中找到它


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

在Android下,不需要
查找包(线程)
,因为Android libc标准库(称为“仿生”)已经包含和中的相关功能。这种支持尚未完全符合POSIX标准,但在大多数情况下已经足够了

因此,您可以跳过查找和链接到外部线程库。如果您的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似乎忽略了cmake\u PREFIX\u路径。