android – CMake FindThreads.cmake将找不到我的pthreads.h标头

android – CMake FindThreads.cmake将找不到我的pthreads.h标头,第1张

概述我正在使用 android-cmake编译Android应用程序.这实际上创建了一个CMake工具链文件,用于使用Android NDK提供的工具链. 与this related question一样,我在CMakeLists.txt文件中遇到以下行问题: find_package(Threads REQUIRED) 头文件位于 ~/Android/android-ndk-r7/platforms 我正在使用 android-cmake编译AndroID应用程序.这实际上创建了一个CMake工具链文件,用于使用AndroID NDK提供的工具链.

与this related question一样,我在CMakeLists.txt文件中遇到以下行问题:

find_package(Threads required)

头文件位于

~/AndroID/androID-ndk-r7/platforms/androID-8/arch-arm/usr/include/pthread.h

库文件位于

~/AndroID/androID-ndk-r7/platforms/androID-8/arch-arm/usr/lib/libthread_db.so

问题是FindThreads.cmake调用CHECK_INCLUDE_fileS(“pthread.h”,CMAKE_HAVE_PTHREAD_H),这似乎无需检查该目录.

根据CMake’s Useful Variables wiki page,CMAKE_INCLUDE_PATH允许设置头搜索路径,CMAKE_liBRARY_PATH允许设置库搜索路径,CMAKE_PREFIX_PATH似乎同时为find_package提供.

但是,尽管我在运行cmake之前是否设置了环境变量…

export CMAKE_INCLUDE_PATH=~/AndroID/androID-ndk-r7/platforms/androID-8/arch-arm/usr:~/AndroID/androID-ndk-r7/platforms/androID-8/arch-arm/usr/include

…或者我是否直接在CMakeLists.txt中设置它们……

if(ANDROID)    set(CMAKE_INCLUDE_PATH        ${ANDROID_NDK_SYSROOT}/usr        ${ANDROID_NDK_SYSROOT}/usr/include        ${CMAKE_INCLUDE_PATH}    )    set(CMAKE_liBRARY_PATH        ${ANDROID_NDK_SYSROOT}/usr        ${ANDROID_NDK_SYSROOT}/usr/lib        ${CMAKE_liBRARY_PATH})    set(CMAKE_PREFIX_PATH        ${ANDROID_NDK_SYSROOT}        ${CMAKE_PREFIX_PATH})    message(${ANDROID_NDK_SYSROOT})    message(${CMAKE_INCLUDE_PATH})endif()find_package(Threads required)

…(这会执行,打印消息),以及${ANDROID_NDK_SYSROOT}包含的位置

/Users/martin/AndroID/androID-ndk-r7/platforms/androID-8/arch-arm

我仍然得到消息

Could NOT find Threads (missing: Threads_FOUND)

有人对我做错了什么有任何建议吗?

解决方法 经过大量的调试后我找到了解决这个问题的方法,这很奇怪.本质上,FindThreads.cmake调用一个名为CHECK_INCLUDE_fileS的宏,该宏尝试TRY_COMPILE一个源文件,该文件只包含提供CHECK_INCLUDE_fileS宏的头文件.

请注意,它确实使用了@sakra建议的CMAKE_required_INCLUDES,因此非常有用.

使用androID-cmake,TRY_COMPILE宏尝试使用带有所有指定编译标志的NDK中的arm-linux-androIDeabi-gcc编译器进行编译. androID.toolchain.cmake文件包含以下行,用于设置其中一些编译标志:

if( BUILD_WITH_ANDROID_NDK ) set( CMAKE_CXX_FLAGS "--sysroot=\"${ANDROID_NDK_SYSROOT}\" ${CMAKE_CXX_FLAGS}" ) set( CMAKE_C_FLAGS "--sysroot=\"${ANDROID_NDK_SYSROOT}\" ${CMAKE_C_FLAGS}" )

TRY_COMPILE宏失败,并且根据CMakeError.log文件包含以下内容:

Run Build Command:/opt/local/bin/gmake "cmTryCompileExec/fast"/opt/local/bin/gmake -f CMakefiles/cmTryCompileExec.dir/build.make CMakefiles/cmTryCompileExec.dir/buildgmake[1]: Entering directory '/Users/martin/RepositorIEs/Delta/build/androID/CMakefiles/CMakeTmp'"/Applications/CMake 2.8-4.app/Contents/bin/cmake" -E cmake_progress_report /Users/martin/RepositorIEs/Delta/build/androID/CMakefiles/CMakeTmp/CMakefiles 1Building C object CMakefiles/cmTryCompileExec.dir/CheckIncludefiles.c.o/Users/martin/AndroID/androID-ndk-r7/toolchains/arm-linux-androIDeabi-4.4.3/prebuilt/darwin-x86/bin/arm-linux-androIDeabi-gcc   --sysroot=;/Users/martin/AndroID/androID-ndk-r7/platforms/androID-8/arch-arm" -fPIC -DANDROID -Wno-psabi -fsigned-char -mthumb -march=armv7-a -mfloat-abi=softfp  " -I/Users/martin/AndroID/androID-ndk-r7/sources/cxx-stl/gnu-libstdc++/include -I/Users/martin/AndroID/androID-ndk-r7/sources/cxx-stl/gnu-libstdc++/libs/armeabi-v7a/include -I/Users/martin/AndroID/androID-ndk-r7/platforms/androID-8/arch-arm/usr -I/Users/martin/AndroID/androID-ndk-r7/platforms/androID-8/arch-arm/usr/include   -o CMakefiles/cmTryCompileExec.dir/CheckIncludefiles.c.o   -c /Users/martin/RepositorIEs/Delta/build/androID/CMakefiles/CMakeTmp/CheckIncludefiles.carm-linux-androIDeabi-gcc: no input files

如果您在实际编译器行上向右滚动(从底部开始第二个),您可以看到–sysroot =; / …部分.即使上面的CMake行使用转义字符串,CMake已将第一个转义的引号转换为分号,并将第二个作为正常引号,导致sysroot行中的分号,然后是包含所有CMAKE_CXX_FLAGS的字符串文字(易于看看SO的语法突出显示).

对此的解决方案是修改androID.toolchain.cmake以删除转义的引用,因为它们是不必要的.

if( BUILD_WITH_ANDROID_NDK ) set( CMAKE_CXX_FLAGS "--sysroot=${ANDROID_NDK_SYSROOT} ${CMAKE_CXX_FLAGS}" ) set( CMAKE_C_FLAGS "--sysroot=${ANDROID_NDK_SYSROOT} ${CMAKE_C_FLAGS}" )
总结

以上是内存溢出为你收集整理的android – CMake FindThreads.cmake将找不到我的pthreads.h标头全部内容,希望文章能够帮你解决android – CMake FindThreads.cmake将找不到我的pthreads.h标头所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/web/1129659.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-05-30
下一篇2022-05-30

发表评论

登录后才能评论

评论列表(0条)

    保存