dyld:惰性符号绑定失败:找不到符号:_yylex
dyld: lazy symbol binding failed: Symbol not found: _yylex
我是 flex 和 bison 的新手,在我的 Mac 上,我使用这些在我的 Mac 上安装 flex 和 bison:
brew install flex && brew link flex --force
brew install bison && brew link bison --force
这是我的 test1ll.l
文件
%{
#include <iostream>
using namespace std;
%}
%%
[0-9]+ { cout << "Number "; }
[a-zA-Z]+ { cout << "Word "; }
[ \t] ;
%%
然后我运行执行以下命令:
flex -otest1ll.c test1ll.l
g++ test1ll.c -otest1 -lfl
./test1
我遇到了这些错误:
dyld: lazy symbol binding failed: Symbol not found: _yylex
Referenced from: /usr/local/opt/flex/lib/libfl.2.dylib
Expected in: flat namespace
dyld: Symbol not found: _yylex
Referenced from: /usr/local/opt/flex/lib/libfl.2.dylib
Expected in: flat namespace
Abort trap: 6
有人可以解释并帮助我修复吗?
如果您打算使用 C++,您会发现使 flex 扫描器自包含更容易,而不是依赖 libfl
,这假定 C 链接。
在第一个 %%
之前添加 %option noyywrap
(但见下文)以避免需要 yywrap
并在最后添加一个简单的 main
,在第二个之后%%
:
int main() {
while (yylex()) {}
return 0;
}
个人比较喜欢:
%option noinput nounput noyywrap nodefault
如果您不使用 input()
或 unput()
,前两个选项可以使用 -Wall
进行编译,如果您的扫描仪使用,最后一个选项将导致 flex 报错无法识别某些输入。在这种情况下,它会标记出您的扫描仪无法对非字母数字字符执行操作,只是将它们回显到标准输出。 (但也许这是故意的。)
我是 flex 和 bison 的新手,在我的 Mac 上,我使用这些在我的 Mac 上安装 flex 和 bison:
brew install flex && brew link flex --force
brew install bison && brew link bison --force
这是我的 test1ll.l
文件
%{
#include <iostream>
using namespace std;
%}
%%
[0-9]+ { cout << "Number "; }
[a-zA-Z]+ { cout << "Word "; }
[ \t] ;
%%
然后我运行执行以下命令:
flex -otest1ll.c test1ll.l
g++ test1ll.c -otest1 -lfl
./test1
我遇到了这些错误:
dyld: lazy symbol binding failed: Symbol not found: _yylex
Referenced from: /usr/local/opt/flex/lib/libfl.2.dylib
Expected in: flat namespace
dyld: Symbol not found: _yylex
Referenced from: /usr/local/opt/flex/lib/libfl.2.dylib
Expected in: flat namespace
Abort trap: 6
有人可以解释并帮助我修复吗?
如果您打算使用 C++,您会发现使 flex 扫描器自包含更容易,而不是依赖 libfl
,这假定 C 链接。
在第一个 %%
之前添加 %option noyywrap
(但见下文)以避免需要 yywrap
并在最后添加一个简单的 main
,在第二个之后%%
:
int main() {
while (yylex()) {}
return 0;
}
个人比较喜欢:
%option noinput nounput noyywrap nodefault
如果您不使用 input()
或 unput()
,前两个选项可以使用 -Wall
进行编译,如果您的扫描仪使用,最后一个选项将导致 flex 报错无法识别某些输入。在这种情况下,它会标记出您的扫描仪无法对非字母数字字符执行操作,只是将它们回显到标准输出。 (但也许这是故意的。)