2016-01-18 3 views
-1

Я пытаюсь построить проект, который использует flex, и при времени ссылки следующие символы гибки не определены: yy_create_buffer и yy_switch_to_buffer. Это явно гибкие функции, как описано в документе flex manual.Где указаны символы yy_switch_to_buffer и yy_create_buffer?

Вы знаете, где эти функции определены? Я подозреваю, что они из библиотеки flex должны быть переданы в компоновщик ... Однако я искал последние гибкие пакеты flex-devel для моего дистрибутива (redhat), и, похоже, нет такой библиотеки.

ответ

1

Символы будут на выходе flex, а не в библиотеке. Они определены в скелете (который flex расширяется с m4). Если у вас возникли проблемы с привязкой к этим символам, проблема может быть связана с неправильным определением ссылочного кода:

  • скелет может генерировать код C или C++; в последнем случае имя класса необходимо для ссылки на него, например, yyFlexLexer::yy_create_buffer
  • ведущий yy может быть изменен с помощью опции командной строки flex, чтобы изменить префикс. В сценариях сборки может отсутствовать возможность предоставления этой опции при компиляции некоторого файла.
+0

В make-файле произошла ошибка, и процесс сборки использовал * lex * вместо * flex *. Хотя lex/flex имеет аналогичный синтаксис и API, lex не поддерживает переключение входных буферов и, следовательно, два неопределенных символа. Спасибо за подсказку. – Radu

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