我试图在Windows 10上使用MSYS2和mingw-w64编译https://github.com/buserror/simavr的simavr项目。了解MSYS2下的LD
在编辑makefile以启用MSYS子句(默认注释掉)以及更改2个包含文件的顺序之后,我可以让项目编译。但是,我在链接步骤中遇到错误。
输出是
C:/Programs/msys64/mingw32/bin/../lib/gcc/i686-w64-mingw32/5.3.0/../../../../i686-w64-mingw32/bin/ld.exe: cannot find -lsimavr
编辑生成文件打印$ {LDFLAGS},产生以下。
-L/lib -L/local/lib -L/c/Users/University/GitHub/simavr/simavr/../simavr/obj-i686-w64-mingw32 -lsimavr -lelf -lws2_32
展望的文件夹中生成脚本提到的 “OBJ-i686的-W64-mingw32的” 中,文件 “libsimavr.a” 是存在的。如果我将文件复制到msys lib文件夹,则链接步骤工作正常。
该项目的文件夹结构如下:
- simavr根(其中i从运行生成文件中,位于/ C /用户/大学/ GitHub的)
- simavr
- OBJ-i686的-W64-的mingw32
- simavr
据我所知,LD应该能够正确链接,而无需手动复制文件。我在这里错过了什么?
编辑:
链接错误之前的最后命令。
cc -MMD -Werror -O2 -Wall -g -I/usr/local/include -DNO_COLOR -o obj-i686-w64-mingw32/run_avr.elf obj-i686-w64-mingw32/run_avr.o -L/lib -L/local/lib -L/c/Users/University/GitHub/simavr/simavr/../simavr/obj-i686-w64-mingw32 -lsimavr -lelf -lws2_32
编辑2:
清洁MSYS文件夹的包含路径:传递CC
cc -MMD -Werror -O2 -Wall -g -DNO_COLOR -o obj-i686-w64-mingw32/run_avr.elf obj-i686-w64-mingw32/run_avr.o -L/c/Users/University/GitHub/simavr/simavr/../simavr/obj-i686-w64-mingw32 -lsimavr -lelf -lws2_32
C:/Programs/msys64/mingw32/bin/../lib/gcc/i686-w64-mingw32/5.3.0/../../../../i686-w64-mingw32/bin/ld.exe: cannot find -lsimavr
= GCC使:
gcc -MMD -Werror -O2 -Wall -g -DNO_COLOR -o obj-i686-w64-mingw32/run_avr.elf obj-i686-w64-mingw32/run_avr.o -L/c/Users/University/GitHub/simavr/simavr/../simavr/obj-i686-w64-mingw32 -lsimavr -lelf -lws2_32
C:/Programs/msys64/mingw32/bin/../lib/gcc/i686-w64-mingw32/5.3.0/../../../../i686-w64-mingw32/bin/ld.exe: cannot find -lsimavr
编辑3:
输出find命令:
$ find /c/Users/University/GitHub/simavr -name 'libsimavr.a'
/c/Users/University/GitHub/simavr/simavr/obj-i686-w64-mingw32/libsimavr.a
注意,以前的条目已经使用Git的bash提示符,而不是一个由msys2制成。但是,在msys2提示符下运行相同的命令或从msys2运行mingw提示符会得到相同的结果。
“LDFLAGS”可能正确无误,但是由于您编辑了 makefile,我们无法确定它们所做的操作仍然正确。 要获得失败链接的帮助,您必须至少发布失败的 链接器命令,逐字输出为'make',以及后面的所有诊断 。为了从'simavr' make得到这个输出,以详细模式运行它 ,'make V = 1'。没有必要编辑 这个makefile。失败的连接器命令是 'bin/ld.exe:找不到-lsimavr'之前的最后一个'cc ...'命令。将其发布在您的问题的正文中。 –
在MYSY2提示符下,命令'find/c/Users/University/GitHub/simavr -name'libsimavr.a''的输出是什么? –
'$ find/c/Users/University/GitHub/simavr -name'libsimavr.a' /c/Users/University/GitHub/simavr/simavr/obj-i686-w64-mingw32/libsimavr.a' – mgs