Я пытаюсь построить проект C ++, однако, когда он заканчивает, выдает эту ошибку:
undefined reference to __cxa_end_cleanup'
Используемая цепочка инструментов — ARM GCC 4.7.3, а пользовательские флаги Linker:
-mthumb -march=armv6-m -T .\Generated_Source\PSoC4\cm0gcc.ld -g -Wl,-Map,${OutputDir}\${ProjectShortName}.map -specs=nano.specs -Wl,--gc-sections
Какова общая причина вышеуказанной ошибки? И какие флаги компоновщика решат эту ошибку?
Всякий раз, когда вы получаете неопределенные ошибки, вы не связываете что-то, что удовлетворяет вашим параметрам сборки. У вас есть три варианта,
В этом случае, Ян Ланс Тейлор дает ответ, который -lsupc++
нужно. Кроме того, если вы используете gcc
Вы должны переключиться на g++
, который добавляет подходящие библиотеки для ваших двоичных файлов C ++. Еще немного информации дано в руководстве.
Если вы глубоко встроены, вы можете попробовать написать свою библиотеку с помощью этой функции. источник к __cxa_end_cleanup()
доступен в этом случае для справки. Похоже, что функция заключается в восстановлении регистров во время исключительных ситуаций или exit()
, Если вы не используете функциональность, вы можете заглушить функцию (на свой страх и риск); но код довольно маленький и даже на Cortex-M я бы связался с поставляемой библиотекой.
Добавить -lc ++ в список библиотек компоновщика