неопределенная ссылка на __cxa_end_cleanup ‘

Я пытаюсь построить проект 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

Какова общая причина вышеуказанной ошибки? И какие флаги компоновщика решат эту ошибку?

7

Решение

Всякий раз, когда вы получаете неопределенные ошибки, вы не связываете что-то, что удовлетворяет вашим параметрам сборки. У вас есть три варианта,

  1. Измените параметры сборки.
  2. Предоставить библиотеку.
  3. Предоставить альтернативную библиотеку.
  4. Избегайте вызова функции / использования данных [здесь невозможно].

В этом случае, Ян Ланс Тейлор дает ответ, который -lsupc++ нужно. Кроме того, если вы используете gcc Вы должны переключиться на g++, который добавляет подходящие библиотеки для ваших двоичных файлов C ++. Еще немного информации дано в руководстве.

Если вы глубоко встроены, вы можете попробовать написать свою библиотеку с помощью этой функции. источник к __cxa_end_cleanup() доступен в этом случае для справки. Похоже, что функция заключается в восстановлении регистров во время исключительных ситуаций или exit(), Если вы не используете функциональность, вы можете заглушить функцию (на свой страх и риск); но код довольно маленький и даже на Cortex-M я бы связался с поставляемой библиотекой.

9

Другие решения

Добавить -lc ++ в список библиотек компоновщика

1

По вопросам рекламы [email protected]