交叉编译PCL时的CMake和HAVE_POSIX_MEMALIGN

时间:2018-05-02 11:19:42

标签: c++ cmake arm cross-compiling

我试图用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测试的退出代码。

1 个答案:

答案 0 :(得分:1)

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

如果交叉编译,代码将无法运行(可以在目标计算机上运行,​​而不能在主机计算机上运行配置已执行),因此CMake请求帮助。

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

  1. 如果您知道目标计算机支持该功能,则可以将缓存变量设置为0(这意味着“成功”)。或者,如果目标计算机上不支持该功能,您可以将变量设置为任何非零值。

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

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