编译orocos-toolchain源码时遇非const引用初始化错误求助
解决Orocos Toolchain编译时的
const RTT::corba::CConnPolicy*&初始化错误 我之前也碰到过类似的Orocos编译问题,这个错误本质是C++类型不匹配,大概率是ACE/TAO与Orocos版本不兼容,或者源码里的参数引用定义有问题,给你几个具体的解决步骤:
1. 先确认ACE/TAO与Orocos的版本兼容性
这类类型定义不匹配的错误,很多时候都是依赖版本不对导致的。你得检查一下当前编译的ACE/TAO版本,是不是和你用的Orocos Toolchain源码官方推荐的依赖版本一致。比如Orocos 2.x系列通常对应特定版本的ACE/TAO,版本差得太多很容易出现接口定义冲突。
2. 修复源码中的类型不匹配问题
找到报错的rtt/transports/corba/CMakeFiles/rtt-transport-corba-gnulinux_plugin.dir/CorbaLib.cpp文件,定位到触发错误的代码行。这个错误提示的核心是:代码试图把一个const指针的临时值(或者非const指针)绑定到非const的引用const RTT::corba::CConnPolicy*&上,这在C++里是不允许的。
常见的修复方式有两种:
- 如果是函数调用的问题:把传入的参数转换成
const RTT::corba::CConnPolicy*类型,避免传递临时指针对象; - 如果是函数定义的问题:把函数的参数从
const RTT::corba::CConnPolicy*&修改为const RTT::corba::CConnPolicy* const&——const引用是可以绑定临时值的,这样就能解决初始化错误。
3. 清理编译缓存后重新编译
有时候之前的编译缓存会残留旧的配置,导致错误一直存在。先删除编译生成的目录:
rm -rf build_isolated install_isolated
然后重新执行编译命令,还可以加上-DCMAKE_VERBOSE_MAKEFILE=ON来查看更详细的编译日志,确认ACE/TAO的头文件路径是否正确:
catkin_make_isolated --install -DENABLE_CORBA=ON -DCORBA_IMPLEMENTATION=TAO -DCMAKE_VERBOSE_MAKEFILE=ON
4. 检查ACE/TAO的编译配置
确认ACE/TAO编译时是否开启了Orocos需要的选项:
- 比如是否启用了C11及以上标准(Orocos很多版本依赖C11),编译ACE时可以设置
ACE_USE_CPP11=1宏; - 确认TAO的CORBA组件是否完整编译,没有遗漏必要的模块。
内容的提问来源于stack exchange,提问作者ramesh
相关产品推荐
相关产品推荐

