【问题标题】:CMake and HAVE_POSIX_MEMALIGN when cross-compiling PCL交叉编译 PCL 时的 CMake 和 HAVE_POSIX_MEMALIGN
【发布时间】:2018-05-02 11:19:42
【问题描述】:

我正在尝试使用 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 测试的退出代码。

【问题讨论】:

    标签: c++ cmake arm cross-compiling


    【解决方案1】:

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

    如果cross-compile,代码无法运行(可以在target机器上运行,不能在host机器上运行配置已执行),因此 CMake 寻求帮助。

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

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

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

    3. 此外,现代 CMake 支持设置 emulator,因此 CMake 可以运行交叉编译的可执行文件,而无需用户手动干预。查看CMAKE_CROSSCOMPILING_EMULATOR变量的描述。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-07-11
      • 2012-06-18
      • 2016-12-28
      • 2017-05-08
      • 2015-08-04
      相关资源
      最近更新 更多