Build 在MSYS2下理解LD

Build 在MSYS2下理解LD,build,makefile,ld,avr-gcc,Build,Makefile,Ld,Avr Gcc,我正在尝试使用MSYS2和mingw-w64从Windows 10上编译simavr项目 在编辑makefiles以启用MSYS子句(默认情况下注释掉)并更改2个包含文件的顺序后,我可以让项目进行编译。但是,我在链接步骤中确实遇到了一个错误 输出是 C:/Programs/msys64/mingw32/bin/../lib/gcc/i686-w64-mingw32/5.3.0/../../../../i686-w64-mingw32/bin/ld.exe: cannot find -lsimav

我正在尝试使用MSYS2和mingw-w64从Windows 10上编译simavr项目

在编辑makefiles以启用MSYS子句(默认情况下注释掉)并更改2个包含文件的顺序后,我可以让项目进行编译。但是,我在链接步骤中确实遇到了一个错误

输出是

C:/Programs/msys64/mingw32/bin/../lib/gcc/i686-w64-mingw32/5.3.0/../../../../i686-w64-mingw32/bin/ld.exe: cannot find -lsimavr
编辑makefile以打印${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 root(我从中运行makefile,位于/c/Users/University/GitHub)
    • 西马弗
      • obj-i686-w64-W32
据我所知,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文件夹的include路径:

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
通过CC=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

注意,前面的条目是使用gitbash提示符创建的,而不是来自msys2的。但是,在msys2提示符或msys2的mingw提示符中运行相同的命令会产生相同的结果。

使用mingw-w64工具链来构建项目,您必须从CFLAGS/cxfFlags/CPPFLAGS中删除带有/usr、/local、/lib、/include的所有路径,因为这些路径可以包含来自msys2本身的头和lib。其次,尝试将“CC=gcc”传递给makefile。

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