Я использовал 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
Как я мог решить эту проблему?
дайте угадаю, пытаясь использовать flex на OS / X?
Попробуйте -ll вместо -lfl
Так что да, имя библиотеки flex в OS / X по какой-то причине просто произвольно отличается. OS / X не совсем Linux, но он довольно близок. У вас есть несколько вариантов здесь.
Вы можете просто иметь отдельную систему сборки и исходные файлы для OS / X. Конечно, Apple может понравиться это с их продвигающимся XCode, Objective-C и небольшим количеством совместимости.
Вы можете построить против Linux и затем взаимодействовать с Порты Mac а также Homebrew.
Вы можете создать свой проект, используя Autotools. Это не удивительная ссылка, изучение этой системы очень сложное, но это, безусловно, стандартная вещь для Linux. Это на самом деле сработает, я нахожу, если у вас есть терпение, OS / X достаточно близок, чтобы на нем работали сборки на основе автоинструментов.
В последнее время я был включен Cocoapods, который я считаю попыткой присоединиться к сообществу открытого исходного кода и XCode. Это своего рода половина 1 и 3 сорта с упором на модульность внешнего источника и его компиляцию в .app (через Xcode).
предупреждение: спецификатор типа отсутствует, по умолчанию используется значение int
означает, что вы должны объявить тип возвращаемого значения для главной функции. Место int
в различие функций.
ld: библиотека не найдена для -lfl
флаг -l означает, что компилятор должен использовать libfl.a
построить программу. Как сказано выше @waTeim, для Mac OS вы можете использовать libl.a, но эта библиотека может и не существовать. Есть еще один способ это разместить
%option noyywrap
в верхней части файла flex * .l. В этом случае вы можете скомпилировать без дополнительных библиотек.