我试图用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
测试的退出代码。
答案 0 :(得分:1)
使用try_run命令CMake编译并运行一些代码。
如果交叉编译,代码将无法运行(可以在目标计算机上运行,而不能在主机计算机上运行配置已执行),因此CMake请求帮助。
变量名称 HAVE_POSIX_MEMALIGN_EXITCODE 表明,需要运行POSIX_MEMALIGN功能的测试,并且该变量包含该测试的结果。
如果您知道目标计算机支持该功能,则可以将缓存变量设置为0
(这意味着“成功”)。或者,如果目标计算机上不支持该功能,您可以将变量设置为任何非零值。
或者,您可以将测试的可执行文件复制到目标计算机,在那里运行它,并检查结果。之后,根据该结果设置缓存变量。
此外,现代CMake支持模拟器的设置,因此CMake可以运行交叉编译的可执行文件而无需用户的手动干预。请参阅CMAKE_CROSSCOMPILING_EMULATOR变量的说明。