2016-12-07 2 views
2

Немного фона:ЬурейеГо и #define с таким же именем

Я пытаюсь порта некоторых .ksh файлов, которые я работаю на Solaris для работы на Windows, используя Cygwin. Существует различие между реализацией ksh, выполняемой в окне Solaris, и реализацией pdksh, которая легко устанавливается в Cygwin, которая имеет дело с подоболочками - вы можете проверить this question для получения подробной информации, если хотите.

Из-за этой разницы я пытаюсь создать набор инструментов AST, найденный here, потому что двоичные файлы больше не доступны от AT & T в соответствии с this question.

Мой вопрос:

Когда я пытаюсь построить в соответствии с инструкциями на сайте GitHub, я ветер с ошибкой компиляции файла называется fastfind.c:

+ cc -D_BLD_STATIC -D_BLD_DLL -D_BLD_ast -I. -I/ast-master/src/lib/libast -Icomp -I/ast-master/src/lib/libast/comp -Imisc -I/ast-master/src/lib/libast/misc -Iinclude -I/ast-master/src/lib/libast/include -Istd -I/ast-master/src/lib/libast/std -D_PACKAGE_ast -c /ast-master/src/lib/libast/misc/fastfind.c, 
In file included from /ast-master/src/lib/libast/std/stdio.h:22:0, 
    from ./ast_wchar.h:87, 
    from /ast-master/src/lib/libast/include/regex.h:39, 
    from /ast-master/src/lib/libast/misc/findlib.h:35, 
    from /ast-master/src/lib/libast/misc/fastfind.c:77: 
./ast_stdio.h:82:15: error: conflicting types for '_sfio_FILE' 
#define FILE _sfio_FILE 
      ^
./ast_stdio.h:80:24: note: previous declaration of '_sfio_FILE' was here 
typedef struct _sfio_s _sfio_FILE; 
         ^
mamake [lib/libast]: *** exit code 1 making fastfind.o 

линии 80 -82 из файла ast_stdio.h следующим образом:

80: typedef struct _sfio_s _sfio_FILE; 
81: 
82: #define FILE  _sfio_FILE 

Кроме того, в верхней части файла ast_stdio.h есть это:

/* : : generated by proto : : */ 
/* : : generated from /ast-master/src/lib/libast/features/stdio by iffe version 2012-07-17 : : */ 

Наконец, вот моя соответствующая информация куб.см:

$ cc --version 
cc (GCC) 5.4.0 

Немного отказ от ответственности: мой C ржавый, как я был Java парень в течение последних 14 лет. Я понимаю, что директива #define оценивается препроцессором, поэтому строка 82 по существу заменяет строку FILE на _sfio_FILE в коде, а строка typedef не будет оцениваться до фактической компиляции.

Очевидно, что я ошибаюсь, или эта ошибка не будет происходить. И, очевидно, этот код компилируется для кого-то, или он не был бы выпущен таким образом. Любое понимание того, что происходит здесь и как я могу скомпилировать этот файл, оценивается. Я нашел this question, который кажется близким к тому, что я прошу, но между моим делом и этим вопросом есть что-то другое, или мой мозг C не может понять, почему этот вопрос должен охватывать мою конкретную ситуацию.

Спасибо за ваше время!

+0

Возможно использование #undef? – koper89

+0

Не могли бы вы предоставить MCVE? http://stackoverflow.com/help/mcve – Yunnosch

ответ

0

Ошибка произошла из-за изменения glibc. См. Red Hat Bugzilla # 1477082 для получения дополнительной информации и изменений в исходных файлах.

Смежные вопросы