对“yylex';”的未定义引用;,msys2/mingw问题 我不会说我是C++新手,但我完全被这个问题打败了。我正在尝试在windows上使用msys2和mingw32-w64(mingw的64位版本)为retroarch:编译commodore 64仿真器。我有一个链接错误 C:/msys64/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/10.2.0/../../../../x86_64-w64-mingw32/bin/ld.exe: ./vice/src/monitor/mon_parse.o:mon_parse.c:(.text+0x9ca): undefined reference to `yylex' C:/msys64/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/10.2.0/../../../../x86_64-w64-mingw32/bin/ld.exe: ./vice/src/monitor/mon_parse.o:mon_parse.c:(.text+0x2bdd): undefined reference to `make_buffer' C:/msys64/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/10.2.0/../../../../x86_64-w64-mingw32/bin/ld.exe: ./vice/src/monitor/mon_parse.o:mon_parse.c:(.text+0x2c03): undefined reference to `free_buffer' C:/msys64/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/10.2.0/../../../../x86_64-w64-mingw32/bin/ld.exe: ./vice/src/monitor/mon_parse.o:mon_parse.c:(.rdata$.refptr.last_len[.refptr.last_len]+0x0): undefined reference to `last_len' C:/msys64/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/10.2.0/../../../../x86_64-w64-mingw32/bin/ld.exe: ./vice/src/monitor/mon_parse.o:mon_parse.c:(.rdata$.refptr.opt_asm[.refptr.opt_asm]+0x0): undefined reference to `opt_asm' C:/msys64/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/10.2.0/../../../../x86_64-w64-mingw32/bin/ld.exe: ./vice/src/monitor/mon_parse.o:mon_parse.c:(.rdata$.refptr.new_cmd[.refptr.new_cmd]+0x0): undefined reference to `new_cmd' collect2.exe: error: ld returned 1 exit status mingw32-make: *** [Makefile:397: vice_x64_libretro.dll] Error 1

对“yylex';”的未定义引用;,msys2/mingw问题 我不会说我是C++新手,但我完全被这个问题打败了。我正在尝试在windows上使用msys2和mingw32-w64(mingw的64位版本)为retroarch:编译commodore 64仿真器。我有一个链接错误 C:/msys64/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/10.2.0/../../../../x86_64-w64-mingw32/bin/ld.exe: ./vice/src/monitor/mon_parse.o:mon_parse.c:(.text+0x9ca): undefined reference to `yylex' C:/msys64/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/10.2.0/../../../../x86_64-w64-mingw32/bin/ld.exe: ./vice/src/monitor/mon_parse.o:mon_parse.c:(.text+0x2bdd): undefined reference to `make_buffer' C:/msys64/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/10.2.0/../../../../x86_64-w64-mingw32/bin/ld.exe: ./vice/src/monitor/mon_parse.o:mon_parse.c:(.text+0x2c03): undefined reference to `free_buffer' C:/msys64/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/10.2.0/../../../../x86_64-w64-mingw32/bin/ld.exe: ./vice/src/monitor/mon_parse.o:mon_parse.c:(.rdata$.refptr.last_len[.refptr.last_len]+0x0): undefined reference to `last_len' C:/msys64/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/10.2.0/../../../../x86_64-w64-mingw32/bin/ld.exe: ./vice/src/monitor/mon_parse.o:mon_parse.c:(.rdata$.refptr.opt_asm[.refptr.opt_asm]+0x0): undefined reference to `opt_asm' C:/msys64/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/10.2.0/../../../../x86_64-w64-mingw32/bin/ld.exe: ./vice/src/monitor/mon_parse.o:mon_parse.c:(.rdata$.refptr.new_cmd[.refptr.new_cmd]+0x0): undefined reference to `new_cmd' collect2.exe: error: ld returned 1 exit status mingw32-make: *** [Makefile:397: vice_x64_libretro.dll] Error 1,c++,windows,mingw,msys,C++,Windows,Mingw,Msys,因此,根据我的研究,对“yylex”的未定义引用似乎表明我缺少flex或bison。我尝试使用pacman-S bison flex在msys2 shell中安装这两个文件,结果在我的安装文件夹C:\msys64\usr\lib libfl.a和 liby.a 我试图在编译时通过添加以下内容来修改Project makefile以搜索此位置 LDFLAGS += --shared -static-libgcc -static-libstdc++ -Wl,--version-script=$(CO

因此,根据我的研究,
对“yylex”的未定义引用
似乎表明我缺少flex或bison。我尝试使用
pacman-S bison flex
在msys2 shell中安装这两个文件,结果在我的安装文件夹
C:\msys64\usr\lib

libfl.a
liby.a

我试图在编译时通过添加以下内容来修改Project makefile以搜索此位置

LDFLAGS += --shared -static-libgcc -static-libstdc++ -Wl,--version-script=$(CORE_DIR)/libretro/link.T -L/usr/x86_64-w64-mingw32/lib -L/usr/lib
LDFLAGS += -lws2_32 -luser32 -lwinmm -ladvapi32 -lshlwapi -lwsock32 -lws2_32 -lpsapi -liphlpapi -lshell32 -luserenv -lmingw32 -shared -lgcc -lm -lmingw32 -lfl -ly
注意添加了
-L/usr/lib
-lfl-ly

但当我这样做时,编译器抱怨它找不到库
找不到-lfl
找不到-ly

所以我搜索了另一个加载libs的位置,一个libgcc的搜索。a在
C:\msys64\mingw64\x86\u 64-w64-mingw32\lib
中找到了它,所以我猜目录的映射方式有所不同

好的,我把两个.a文件放在那个文件夹中,现在我回到了页面顶部显示的错误,特别是
对'yylex'的未定义引用


我该如何解决这个问题呢,拜托,我今天花了一整天的时间在显示器上敲打我的头,非常感谢您的帮助。

编译一个复杂的仿真器,就像这样,已经是一个重大的挑战,即使是有经验的开发人员也会遇到。但是,在一个被塞进外国操作系统的编译器上尝试这样做,而这个外国操作系统并不是专门为它设计的(windows上的gcc),只会在其上增加更多的复杂性。只有做过你想做的事情的人可能知道正确的过程。P.S.
yylex
不是flex,而是flex机器人生成的词法分析器的输出。您的源代码树中没有正确地构建和/或链接某些内容。您的评论让我对我花在编译模拟器上的时间与实际结果之间的对比感觉不那么糟糕。我有过一些成功的故事,我知道我也能得到这一个,所以如果你有任何建议,我都愿意尝试。你必须搜索源代码树以找到yylex居住的地方。它要么是由flex生成的,要么不是。如果不是,那么下一步就是找出原因。如果它已经生成,下一步就是找出为什么它没有被编译和链接。你需要了解什么是flex和bison,以及它们是如何工作的。这个文件是
/vice/src/monitor/mon_parse.o:mon_parse.c
,但我认为主要的问题是我没有正确地设置mingw,因为链接器正在尝试链接到bison(),并且由于某种原因不能。我确信有一个简单的解决方案可以解决如何设置我的环境的问题。我已经阅读了一些类似的问题,列出了不适当地将其正确地链接到C++和C之间的问题,但是问题的来源似乎很好。