【发布时间】:2014-01-19 23:06:24
【问题描述】:
./configure + make + make install
example.l,其中包含:
%{
int a = 0, b = 0;
%}
%%
\n ++a; ++b;
. ++b;
%%
int main()
{
yylex();
printf("%d - %d", a, b);
}
这是他们网站上的一个基本示例。计算文件中的行数和字符数。
flex example.l。它生成了lex.yy.c
-
gcc lex.yy.c -o lexyy: 抛出 undefined symbols for architecture x86_64 -
gcc lex.yy.c -lfl: ld: 找不到 -lfl 的库 -
gcc lex.yy.c -ll:生成 a.out,但是当我对文件运行它时,它不起作用(打印“0 - 0”)。 我似乎无法编译这个该死的文件。它如何知道在哪里可以找到必要的库?链接不应该从这里(当前文件夹)工作吗?
我无法获得最简单的示例,这有点令人沮丧。
【问题讨论】:
-
得到程序编译后你到底做了什么?它表现出什么行为,你试图做什么?我问是因为它应该等待来自标准输入的输入并读取直到 EOF。
-
如果您在没有参数的情况下运行
./configure,那么您的make install应该已将libfl.a和/或libfl.so安装到/usr/local/lib中。检查那里的那些文件。如果它们丢失,您需要找出原因。如果其中至少存在一个,请尝试在-lfl之前添加-L/usr/local/lib -
@ChronoKitsune 从
lex.yy.c蓝图编译出来的可执行文件应该和一个随机文件一起运行,然后打印出那个文件的行数和字符数(当然随机文件是在我的情况下通常是一个文本文件)。./a.out < lex.yy.c打印"14 - 115"==> 所以这些是文件lex.yy.c的统计信息,但它可以是任何文件。 -
@WumpusQ.Wumbley Aw man.. 我的
/usr/local/lib只有一个文件夹(perl 分期付款 - 与我的需要无关)。知道了这一点,当我必须再次运行make install时,如何删除当前安装?make distclean会吗? -
实际上,现在我已经注意到 osx 标签,我不太确定
/usr/local/lib是正确的位置。当您运行make install时看到打印到终端的消息会很有趣(我知道它可能很多)。在另一个主题上,clean和distclean仅适用于构建目录;大多数 GNU 软件包使用make uninstall作为make install的对立面
标签: c++ c macos gcc flex-lexer