交叉编译 PCL 时的 CMake 和 HAVE_POSIX_MEMALIGN

CMake and HAVE_POSIX_MEMALIGN when cross-compiling PCL

本文关键字:POSIX MEMALIGN HAVE PCL 时的 CMake 交叉编译      更新时间:2023-10-16

我正在尝试使用 Jetson 工具链 (GCC 4.8.5( 在 Docker 中交叉编译 ARM 的 pcl-1.8.1。在CMake配置期间,我得到:

...
-- Performing Test HAVE_MM_MALLOC
-- Performing Test HAVE_MM_MALLOC - Failed
-- Performing Test HAVE_POSIX_MEMALIGN
CMake Error: TRY_RUN() invoked in cross-compiling mode, please set the following cache variables appropriately:
HAVE_POSIX_MEMALIGN_EXITCODE (advanced)
For details see /pcl-1.8.1/build/TryRunResults.cmake
-- Performing Test HAVE_POSIX_MEMALIGN - Failed
-- -- GCC > 4.3 found, enabling -Wabi
-- Try OpenMP C flag = [-fopenmp]
-- Performing Test OpenMP_FLAG_DETECTED
-- Performing Test OpenMP_FLAG_DETECTED - Success
...

是否有人通过任何更改知道这个HAVE_POSIX_MEMALIGN_EXITCODE是什么以及在这种情况下应该是什么值?为什么这首先失败了?

我已经使用相同的设置成功构建了Boost,因此编译器可以正常工作。

编辑:好的,现在我明白这是HAVE_POSIX_MEMALIGN测试的退出代码。

使用try_run命令 CMake 编译并运行一些代码

如果交叉编译,则代码无法运行(它可以在目标计算机上运行,而不是在执行配置的主机上运行(,因此 CMake 会寻求帮助。

变量的名称HAVE_POSIX_MEMALIGN_EXITCODE表明需要运行POSIX_MEMALIGN功能的测试,并且变量包含该测试的结果。

  1. 如果您知道目标计算机支持该功能,则可以将缓存变量设置为0(表示"成功"(。或者,如果目标计算机不支持该功能,则可以将变量设置为任何非零值。

  2. 或者,您可以将测试的可执行文件复制到目标计算机,在那里运行它,然后检查结果。之后,根据该结果设置缓存变量。

  3. 此外,现代 CMake 支持模拟器的设置,因此 CMake 可以运行交叉编译的可执行文件,而无需用户手动干预。请参阅CMAKE_CROSSCOMPILING_EMULATOR变量的说明。