gpt4 book ai didi

macos - 无法编译 flex & bison(符号未找到 x86_64)

转载 作者:行者123 更新时间:2023-12-04 00:08:09 25 4
gpt4 key购买 nike

我试图在运行 Yosemite 的 Mac 上的 Flex & Bison 上编译一个简单的程序,但出现以下错误:

架构 x86_64 的 undefined symbol : “_yyerror”,引用自: _yyparse 在 pr1-19c182.old:未找到架构 x86_64 的符号clang:错误:链接器命令失败,退出代码为 1(使用 -v 查看调用)

我的两个文件看起来像这样,它们在我老师的 Ubuntu 安装上编译,但我无法让它们在我的 Mac 上工作:

pr1.y

%{
#include <stdio.h>
%}

%%

expr : expr '+' term {printf(" + ");}
| term
;

term : term '*' fact {printf(" * ");}
| fact
;

fact : "(" expr ")"
| '0' {printf("0");}
| '1' {printf("1");}
| '2' {printf("2");}
| '3' {printf("3");}
| '4' {printf("4");}
| '5' {printf("5");}
| '6' {printf("6");}
| '7' {printf("7");}
| '8' {printf("8");}
| '9' {printf("9");}

%%

pr1.l

%{
#include "pr1.tab.h"
%}

%%

[0-9] {return (yytext[0]);}
[+*()] {return (yytext[0]);}
\n {return (0);}
. {}

%%

我使用以下命令编译所有内容:

bison -d pr1.y
flex pr1.l
gcc -o result lex.yy.c pr1.tab.c -lfl -std=gnu89

我使用 -std 标志的原因是因为默认是 c99 并且 flex 和 bison 生成的代码会收到警告和错误。有什么想法???

最佳答案

您需要在您的 Bison 输入文件 (pr1.y) 中定义 yyerror。而且你需要声明 yylex 否则你会得到另一个警告。

以下就可以了:

%{
#include <stdio.h>
void yyerror(const char* msg) {
fprintf(stderr, "%s\n", msg);
}
int yylex();
%}

如果没有你老师的机器,我不知道它是如何工作的。

另外,Mac OS X 有非常旧的 bison 和 flex 版本。您可能想要升级。

关于macos - 无法编译 flex & bison(符号未找到 x86_64),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28207339/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com