Я использую 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]' of /home/nghia/Documents/catkin/Firmware/Build/px4fmu-v2_default.build//home/nghia/Documents/catkin/Firmware/src/modules/state_machine_boost/module.pre. o: определено в удаленном разделе `.rodata._ZTIN5boost12noncopyable_11noncopyableE[_ZTIN5boost12noncopyable_11noncopyableE]' файла /home/nghia/Documents/catkin/Firmware/Build/px4fmu-v2_default.build//home/nghia/Documents/catkin/Firmware/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;