0

我不会完全说我是 C++ 新手,但我完全被这个问题打败了。我正在尝试为retroarch编译一个commodore 64模拟器:https ://github.com/libretro/vice-libretro ,在Windows上使用msys2和mingw32-w64,mingw的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

因此undefined reference to 'yylex',根据我的研究,似乎表明我缺少 flex 或 bison。我尝试将它们都安装在 msys2 shell 中pacman -S bison flex,这会在我的安装文件夹中产生 2 个附加文件,其中包括C:\msys64\usr\lib

libfl.aliby.a

我试图通过添加以下内容来修改项目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

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

因此,我搜索了确定从中加载库的其他位置,搜索 libgcc.a 发现它在其中,C:\msys64\mingw64\x86_64-w64-mingw32\lib所以我猜这些目录的映射方式有所不同。

好的,所以我将两个 .a 文件放在该文件夹中,现在我回到页面顶部显示的错误,特别是undefined reference to 'yylex'

请问我该如何解决这个问题,我今天花了一整天的时间把头撞在显示器上,非常感谢任何帮助。

4

0 回答 0