【发布时间】:2015-08-18 04:36:39
【问题描述】:
我正在使用 gcc 4.7.4 20140401 为嵌入式 ARM Cortex M4 (Pixhawk) 进行交叉编译。我正在尝试让 Boost Statechart 正常工作,但遇到了一个我无法解决的错误。下面是其中之一,这样的还有很多。
_ZTIN5boost12noncopyable_11noncopyableE' referenced in section.rodata._ZTIN5boost10statechart13state_machineI15PositionControl15HoldingPositionSaIvENS0_25null_exception_translatorEEE [_ZTIN5boost10statechart13state_machineI15PositionControl15HoldingPositionSaIvENS0_25null_exception_translatorEEE]” /home/nghia/Documents/catkin/Firmware/Build/px4fmu-v2_default.build//home/nghia/Documents/catkin/Firmware/src/modules/state_machine_boost的/module.pre.o:在 /home/nghia/Documents/catkin/Firmware/Build/px4fmu-v2_default.build//home/nghia/Documents/catkin/Firmware 的废弃部分 `.rodata._ZTIN5boost12noncopyable_11noncopyableE[_ZTIN5boost12noncopyable_11noncopyableE]' 中定义/src/modules/state_machine_boost/module.pre.o
我已经阅读了有关“在废弃部分中定义”的所有 Stackoverflow 帖子,但没有找到任何可行的解决方案。这包括启用/禁用 -ffunction-sections、-fdata-sections、--gc-sections、优化标志和重新排序模块。
Boost Statechart 大量使用模板,我怀疑这是导致问题的原因。 gcc 是否优化了它认为没有被使用的东西?
更新: 我设法想出了一个触发上述错误的最小示例:
class dummy : boost::noncopyable
{
public:
int x;
};
static dummy g_dummy;
【问题讨论】: