Ошибка компилятора C из стандартных заголовков - неопределенные определения C++

Я пытаюсь скомпилировать программу на C, но получаю много ошибок.

Ошибки встречаются в стандартных заголовочных файлах C (inttypes.h, stdio.h, stat.h и т. Д.).

Источником ошибок являются следующие неопределенные константы:

__BEGIN_DECLS __END_DECLS __BEGIN_NAMESPACE_STD __END_NAMESPACE_STD __THROW __CONCAT

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

Например, этот вопрос этот вопрос показывает следующее определение для __BEGIN_DECLS

/* C++ needs to know that types and declarations are C, not C++.  */
#ifdef   __cplusplus
# define __BEGIN_DECLS  extern "C" {                                            
# define __END_DECLS }
#else
# define __BEGIN_DECLS
# define __END_DECLS
#endif

Есть предположения, почему я сталкиваюсь с этими ошибками?

1 ответ

Решение

Я нашел проблему:

Эти константы должны были быть определены в sys / cdefs.h.

По какой-то причине этот файл был в /usr/include/bsd/sys/cdefs.h.

Bsd-версия cdefs.h не имела этих констант.

Я удалил каталог bsd и переустановил libc6-dev.

Кажется, все работает сейчас.

Другие вопросы по тегам