CMake:FIND_包(线程)用于Android交叉编译
我正在使用Android NDK和Cmake生成我的项目的共享库 我正在将一个现有项目从Ubuntu移植到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
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路径。