我正在尝试使用MSYS2和mingw-w64在Windows 10上从https://github.com/buserror/simavr编译simavr项目。
编辑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
编辑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文件夹,链接步骤可以正常工作。
项目的文件夹结构如下:
据我所知,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 -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 /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提示符会产生相同的结果。
答案 0 :(得分:1)
使用mingw-w64工具链来构建项目你必须从CFLAGS / CXXFLAGS / CPPFLAGS中删除所有带有/ usr,/ local,/ lib,/ include的路径,因为这些路径可以包含来自MSYS2本身的头文件和库。其次,尝试将“CC = gcc”传递给makefile。