В настоящее время я получаю сообщение об ошибке:
In file included from /usr/include/errno.h:35:0,
from lex.yy.c:21:
/usr/include/x86_64-linux-gnu/bits/errno.h:50:1: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘extern’
extern int *__errno_location (void) __THROW __attribute__ ((__const__));
^
(вместе со многими другими) при попытке скомпилировать файл, сгенерированный lex, с помощью команды:
gcc lex.yy.c
lex.l (файл передан в lex для генерации lex.yy.c) источник:
%%
"hello world" printf("goodbye");
. ;
%%
Эта проблема возникает, когда я пытаюсь скомпилировать любой файл, который был сгенерирован lex или flex (я пробовал оба)
Как я уже упоминал, есть также много других ошибок, но, возможно, исправление этой ошибки решит некоторые другие.После поиска некоторых распространенных ошибок в файле errno.h и не найдя ничего полезного, я спрашиваю здесь.
Я использую Ubuntu 16.04 LTS.Дайте мне знать, если вам нужна дополнительная информация о проблеме, и я сделаю все возможное, чтобы помочь.
Спасибо за любой совет:)
Изменить для 'rici':
Первые 21 строка моего файла lex.yy.c выглядят следующим образом:
#line 3 "lex.yy.c"
#define YY_INT_ALIGNED short int
/* A lexical scanner generated by flex */
#define FLEX_SCANNER
#define YY_FLEX_MAJOR_VERSION 2
#define YY_FLEX_MINOR_VERSION 6
#define YY_FLEX_SUBMINOR_VERSION 0
#if YY_FLEX_SUBMINOR_VERSION > 0
#define FLEX_BETA
#endif
/* First, we deal with platform-specific or compiler-specific issues. */
/* begin standard C headers. */
#include <stdio.h>
#include <string.h>
#include <errno.h>
#include <stdlib.h>
/* end standard C headers. */
Редактировать для @ sepp2k:
Я использовал vimdiff для сравнения 2 файлов.
Вещи, которые есть в моем файле, но отсутствуют в вашем:
#ifdef __cplusplus
/* The "const" storage-class-modifier is valid. */
#define YY_USE_CONST
#else /* ! __cplusplus */
/* C99 requires __STDC__ to be defined as 1. */
#if defined (__STDC__)
#define YY_USE_CONST
#endif /* defined (__STDC__) */
#endif /* ! __cplusplus */
#ifdef YY_USE_CONST
===============================================================
#include <string.h>
#include <errno.h>
#include <stdlib.h>
#line 476 "lex.yy.c"
На самом деле в вашем файле нет ничего, чего бы не было в моем
Любого другогоРазличия, похоже, просто различия в форматировании.
Я также проверил четыре файла заголовка в стандартной программе на Си (посмотрите, что вы имеете в виду сейчас), и я могу подтвердить, что это errno.h, который вызывает ошибку.
Привет мир в C с включенным errno.h выдает следующую ошибку:
In file included from /usr/include/errno.h:35:0,
from test.c:2:
/usr/include/x86_64-linux-gnu/bits/errno.h:50:1: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘extern’
extern int *__errno_location (void) __THROW __attribute__ ((__const__));
^
In file included from test.c:4:0:
/usr/include/stdio.h:13:1: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘int’
int printf(const char* __restrict, ...);
^
edit for @rici:
Вот полный дамп ошибок, возникающих прия запускаю "gcc lex.yy.c": https://gist.github.com/raygarner/0601e57f5be21e16e0ae4ee34643b121
редактировать для @ sepp2k:
ранее, я тестировал этот точно такой же процесс компиляции на новой установке Debian 9 вВМ и я получили ту же самую ошибку, которую я делаю здесь, на Ubuntu после исправления errno.h
Вот как это выглядит:
/usr/lib/gcc/x86_64-linux-gnu/5/../../../x86_64-linux-gnu/crt1.o: In function `_start':
(.text+0x20): undefined reference to `main'
collect2: error: ld returned 1 exit status