gpt4 book ai didi

linker-errors - flex 和 g++ 的链接器错误?

转载 作者:行者123 更新时间:2023-12-04 03:40:10 24 4
gpt4 key购买 nike

当我尝试使用 g++ 编译生成的扫描器时,我遇到了一些关于 flex 的链接器错误。如果我给 flex 以下(非常简单的)脚本:

%%
. ECHO;

然后运行 ​​flex 作为

flex++ scanner.l 

然后尝试将生成的代码编译为

g++ lex.yy.cc -ll

我收到以下错误:

/tmp/ccD5WdY3.o:(.rodata._ZTV11yyFlexLexer[vtable for yyFlexLexer]+0x28): undefined reference to `yyFlexLexer::yywrap()'
/usr/lib/libl.a(libmain.o): In function `main':
/build/buildd/flex-2.5.35/libmain.c:30: undefined reference to `yylex'
collect2: ld returned 1 exit status

我不确定这是为什么。我是否使用 -ll 链接到了错误的库?如果是这样,我应该怎么做才能解决这个问题?

最佳答案

正如你所说,我认为 -ll 是不必要的。
可能 libl 包含如下代码:

int main() { return yylex(); }

但是flex++生成的扫描码不包含独立的函数 yylex。所以如果扫描器链接到上面的main,它就找不到yylex
当扫描器由 flex++ 生成时,该扫描器需要一个专用的 main而不是使用 -ll 链接,最简单的 main 将如下所示:

int main() {
for ( yyFlexLexer l; l.yylex(); ) {}
}

关于C++扫描器的使用, this part的 flex 文档会有所帮助。

话虽这么说,正如文件所说:

the present form of the scanning class is experimental and may change considerably between major releases

我不能积极推荐使用 C++ 扫描器。

关于linker-errors - flex 和 g++ 的链接器错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6433537/

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