Библиотека не найдена для -lfl

Я использовал flex а также bison чтобы построить простой проект калькулятора я клонировал из Github.

Но после того, как я напечатал make в терминале я получил следующее сообщение:

gcc -o calc calc.tab.c lex.yy.c -lfl
calc.y:48:1: warning: type specifier missing, defaults to 'int' [-Wimplicit-int]
main() {
^~~~
1 warning generated.
ld: library not found for -lfl
clang: error: linker command failed with exit code 1 (use -v to see invocation)
make: *** [calc] Error 1

Как я мог решить эту проблему?

17

Решение

дайте угадаю, пытаясь использовать flex на OS / X?

Попробуйте -ll вместо -lfl

Использование Flex в OS / X

Так что да, имя библиотеки flex в OS / X по какой-то причине просто произвольно отличается. OS / X не совсем Linux, но он довольно близок. У вас есть несколько вариантов здесь.

  1. Вы можете просто иметь отдельную систему сборки и исходные файлы для OS / X. Конечно, Apple может понравиться это с их продвигающимся XCode, Objective-C и небольшим количеством совместимости.

  2. Вы можете построить против Linux и затем взаимодействовать с Порты Mac а также Homebrew.

  3. Вы можете создать свой проект, используя Autotools. Это не удивительная ссылка, изучение этой системы очень сложное, но это, безусловно, стандартная вещь для Linux. Это на самом деле сработает, я нахожу, если у вас есть терпение, OS / X достаточно близок, чтобы на нем работали сборки на основе автоинструментов.

  4. В последнее время я был включен Cocoapods, который я считаю попыткой присоединиться к сообществу открытого исходного кода и XCode. Это своего рода половина 1 и 3 сорта с упором на модульность внешнего источника и его компиляцию в .app (через Xcode).

42

Другие решения

предупреждение: спецификатор типа отсутствует, по умолчанию используется значение int

означает, что вы должны объявить тип возвращаемого значения для главной функции. Место int в различие функций.

ld: библиотека не найдена для -lfl

флаг -l означает, что компилятор должен использовать libfl.a построить программу. Как сказано выше @waTeim, для Mac OS вы можете использовать libl.a, но эта библиотека может и не существовать. Есть еще один способ это разместить

%option noyywrap

в верхней части файла flex * .l. В этом случае вы можете скомпилировать без дополнительных библиотек.

0

По вопросам рекламы [email protected]