使用 CMake 为 Android 构建 C++ 时如何解决 pthread 和 posix 错误

问题描述

我的一个项目有一个大问题。一句话:我想把编程语言oorexx移植到Android上。 oorexx 主要是用 C++ 编写的

我安装了 NDK,到目前为止一切正常。

首先,我使用以下命令运行 C​​Make: feature

一个视图警告,但总的来说它有效。但有些警告与我的问题有关,所以我会发布它们:

cmake -DCMAKE_TOOLCHAIN_FILE=~/coding/android-ndk-r22b/build/cmake/android.toolchain.cmake -DANDROID_ABI="x86" -DCMAKE_BUILD_TYPE=Release -DCMAKE_C_COMPILER=$CC -DCMAKE_CXX_COMPILER=$CXX -DANDROID_NATIVE_API_LEVEL=22

接下来我想用 -- Performing Test HAVE_PTHREAD_MUTEX_ERRORCHECK -- Performing Test HAVE_PTHREAD_MUTEX_ERRORCHECK - Failed -- Performing Test HAVE_PTHREAD_MUTEX_RECURSIVE -- Performing Test HAVE_PTHREAD_MUTEX_RECURSIVE - Failed

构建整个东西

现在有两种可能的结果取决于我在 CMakelists.txt 中使用的内容 当我离开 CMakeLists.txt 时,它是以下行: 设置(platform_rexxapi_libs ${ORX_SYSLIB_DL} ${ORX_SYSLIB_PTHREAD})

此行抛出以下错误cmake --build ./ 并且整个构建过程在 13% 处停止并出现此错误

在我的研究中,我了解到在为 Android 构建时没有必要明确定义 pthread。所以我删除${ORX_SYSLIB_PTHREAD} 到现在为止还挺好。那有点帮助。 构建过程最多达到 72%,然后因 posix 错误而停止。 我收到以下错误

Couldnt find -lpthread

我检查了 spawn.h 库在文件中。此外,在为 Linux 或 Windows 构建时不会显示这些错误。所以问题一定与Android Toolchain和CMakeLists.txt有关

一位前同事早在几年前就已经为 Android 制作了一个可用的构建版本。但它的记录很差。然而,他遇到了同样的问题,并发现 CMakeLists.txt 文件中需要一些额外的信息。

附加代码应该是:

/home/tjk/coding/oorexx/oorexxsvn/main/trunk/interpreter/platform/unix/SystemCommands.cpp:1022:17: error: use of undeclared identifier 'posix_spawnp'
            if (posix_spawnp(&pid,argv[0],NULL,argv,getEnvironment()) != 0)
                ^
11 errors generated.
make[2]: *** [CMakeFiles/rexx.dir/build.make:2806: CMakeFiles/rexx.dir/interpreter/platform/unix/SystemCommands.cpp.o] Error 1
make[1]: *** [CMakeFiles/Makefile2:647: CMakeFiles/rexx.dir/all] Error 2
make: *** [Makefile:156: all] Error 2

我在文件添加了这个,但没有任何区别。我得到了 72% 的相同错误

有人知道问题出在哪里吗?我提供了足够的信息吗?如果我没有,请告诉我。 到目前为止,很明显我对 CMake、Android 没有太多经验。因此,如果需要额外的信息,请善待并告诉我。不提供。

感谢您的帮助。非常感谢。

最佳托马斯

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)