找不到-lfl的库

时间:2014-01-23 02:18:11

标签: c++ macos flexc++

我正在使用flexbison构建一个我从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

我该如何解决这个问题?

2 个答案:

答案 0 :(得分:46)

让我猜一下,尝试在OS / X上使用flex?

尝试-ll而不是-lfl

Using Flex on OS/X

所以,OS / X上的flex库名称由于某种原因只是任意不同。 OS / X并不完全是Linux,但它非常接近。你有一些选择。

  1. 您可以只为OS / X创建一个单独的构建系统和源文件。当然苹果可能会喜欢推动XCode,Objective-C和互操作性不强。

  2. 您可以构建vs Linux,然后与Mac PortsHomebrew互动。

  3. 您可以使用autotools创建项目。这不是一个很棒的链接,学习这个系统很粗糙,但对于Linux肯定是标准的。这实际上是有效的,我发现如果你对它有耐心,OS / X足够接近基于autotools的构建将在它上面工作。

  4. 最近,我已经转向Cocoapods,我认为这是尝试加入开源社区和XCode。它有点1和3种类型,强调模块化外部源并将其编译成.app(通过Xcode)。

答案 1 :(得分:0)

  

警告:缺少类型说明符,默认为'int'

表示你应该声明main函数的返回类型。将int放在功能定义中。

  

ld:找不到-lfl的库

flag -l表示编译器必须使用libfl.a来构建程序。正如@waTeim上面所说,对于Mac OS,你可以使用libl.a,但是这个lib也可能不存在。还有另一种方法是放置

%option noyywrap

在flex * .l文件的顶部。在这种情况下,您可以在没有其他库的情况下进行编译。