C++ gcc增强模板的结果为;定义见“废弃”一节;
我使用gcc 4.7.4 20140401交叉编译嵌入式ARM Cortex M4(Pixhawk)。我试图让Boost状态图正常工作,但遇到了一个无法解决的错误。下面是其中的一个,有很多这样的C++ gcc增强模板的结果为;定义见“废弃”一节;,c++,templates,gcc,boost,C++,Templates,Gcc,Boost,我使用gcc 4.7.4 20140401交叉编译嵌入式ARM Cortex M4(Pixhawk)。我试图让Boost状态图正常工作,但遇到了一个无法解决的错误。下面是其中的一个,有很多这样的 \u ztin5boost12不可复制\u 11不可复制\u 11在.rodata节中引用。\u ztin5boost10状态图13状态机15位置控制15保持位置为空\u 25异常\u翻译对象[\u ztin5boost10状态图13状态机15位置控制15保持位置为空\u 25异常\u翻译对象]'of/
\u ztin5boost12不可复制\u 11不可复制\u 11在
.rodata节中引用。\u ztin5boost10状态图13状态机15位置控制15保持位置为空\u 25异常\u翻译对象[\u ztin5boost10状态图13状态机15位置控制15保持位置为空\u 25异常\u翻译对象]'of/home/nghia/Documents/catkin/Firmware/Build/px4fmu-v2_default.Build//home/nghia/Documents/catkin/Firmware/src/modules/state\u machine\u boost/module.pre.o:在丢弃的部分`.rodata.中定义'of/home/nghia/Documents/catkin/Firmware/Build/px4fmu-v2_default.Build//home/nghia/Documents/catkin/Firmware/src/modules/state_machine\u boost/module.pre.o
我已经阅读了所有关于“在废弃部分定义”的Stackoverflow帖子,但还没有找到任何有效的解决方案。这包括启用/禁用-ffunction节、-fdata节、-gc节、优化标志和重新排序模块
Boost状态图大量使用了模板,我怀疑这是导致问题的原因。gcc是否在优化它认为没有被使用的东西
更新:
我已经找到了一个触发上述错误的简单示例:
class dummy : boost::noncopyable
{
public:
int x;
};
static dummy g_dummy;
原来问题出在另一个包含Boost状态图的模块上。删除其他模块中与Boost相关的代码可以解决所有编译错误。我猜链接器不喜欢在不同的对象文件中看到多个Boost模板实例