Ошибка компилятора 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.
Кажется, все работает сейчас.