Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/149.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ gcc增强模板的结果为;定义见“废弃”一节;_C++_Templates_Gcc_Boost - Fatal编程技术网

C++ gcc增强模板的结果为;定义见“废弃”一节;

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/

我使用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/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模板实例