簡體   English   中英

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 抱怨。 在這種情況下,它會標記出您的掃描儀無法對非字母數字字符執行操作,只是將它們回顯到標准輸出。 (但也許這是故意的。)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM