交叉编译 PCL 时的 CMake 和 HAVE_POSIX_MEMALIGN
CMake and HAVE_POSIX_MEMALIGN when cross-compiling PCL
我正在尝试使用 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功能的测试,并且变量包含该测试的结果。
-
如果您知道目标计算机支持该功能,则可以将缓存变量设置为
0
(表示"成功"(。或者,如果目标计算机不支持该功能,则可以将变量设置为任何非零值。 -
或者,您可以将测试的可执行文件复制到目标计算机,在那里运行它,然后检查结果。之后,根据该结果设置缓存变量。
-
此外,现代 CMake 支持模拟器的设置,因此 CMake 可以运行交叉编译的可执行文件,而无需用户手动干预。请参阅CMAKE_CROSSCOMPILING_EMULATOR变量的说明。
相关文章:
- POSIX open() 挂在 SMB 共享上
- C/C++:POSIX 兼容方式查找默认网络接口上/下
- 使用Boost async_read和POSIX::stream_descriptor从键盘读取
- 没有信号处理程序的POSIX定时器的目的是什么?
- 在目标计算机上访问 POSIX 信号灯时出现可执行文件崩溃(SEGV_MAPERR)
- 强大的 rwlock 在 posix
- 父进程和子进程之间的 POSIX 信号量
- POSIX C/C++日志文件(VEX V5 Brain)
- 适用于win32、linux、mac的POSIX C包装器
- POSIX 条件变量和互斥体"竞争"
- 如何在C++中挂起和恢复 POSIX 线程?
- 线程SCHED_RR Posix 计时器使用的是 100% CPU
- Posix 线程类和启动例程 (pthread)
- 从串行端口(POSIX)读取十六进制值
- 有没有一个 posix lstatat 调用这样的事情
- 为 posix recv 设置超时会导致 udp 数据包丢失吗?
- 用于 64 位/32 位 IPC 的 POSIX 信号量的替代方案?
- 当多个进程使用该段时,Posix 共享内存使用 mremap 调整大小
- POSIX(C )参数类型不匹配
- POSIX 的问题。线程无法正常工作