Ссылка на библиотечную функцию C ++ приводит к некорректному поведению задачи - PullRequest
2 голосов
/ 26 ноября 2011

У меня есть проект ядра с файлами C, библиотеками C и библиотеками C ++.

Когда проект построен так, что основной файл (.c) имеет ссылку на любую функцию в одной из этихБиблиотеки C ++, работающая система каким-то образом повреждена, то есть одна из задач возвращает ЦП на 100% и никогда не дает его снова.

Все задачи работоспособны (без HALTED, без SUSPENDED, без EXCEPTION), ноэта задача блокирует всю систему, выделяя ЦП.

Правильно вызванная функция библиотеки C ++ может быть отлажена с помощью точек останова и т. д.

Кажется, что побочный эффект возникает, когда он связан.

Проблема наблюдается, даже если на эту библиотечную функцию C ++ только что ссылаются, даже не вызывают.

При использовании других библиотек C ++ такой проблемы нет.

Как вы можете объяснить это и на каких моментах мне следует сосредоточиться?

1 Ответ

1 голос
/ 26 ноября 2011

Ваши библиотеки C ++ объявляют свои функции с помощью конструкции extern "C"?Смотрите этот faq:

(32.6) Как я могу создать функцию C ++ f (int, char, float), которая будет вызываться моим кодом C?

Если выЕсли вы хотите, чтобы один и тот же файл заголовка C API использовался как C, так и C ++, вы можете использовать следующую хитрость:

#ifdef __cplusplus
extern "C"
{
#endif


// Function prototypes


#ifdef __cplusplus
} // Closes the extern "C" brace
#endif

В ядре нет поддержки времени выполнения C ++.Такие вещи, как new, delete и исключения не будут работать.В этом блоге статья , где приведены советы по переносу кода C ++ в ядро.

...