2016-03-29 34 views
0

我试图在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

据我所知,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提示符会得到相同的结果。

+0

“LDFLAGS”可能正确无误,但是由于您编辑了 makefile,我们无法确定它们所做的操作仍然正确。 要获得失败链接的帮助,您必须至少发布失败的 链接器命令,逐字输出为'make',以及后面的所有诊断 。为了从'simavr' make得到这个输出,以详细模式运行它 ,'make V = 1'。没有必要编辑 这个makefile。失败的连接器命令是 'bin/ld.exe:找不到-lsimavr'之前的最后一个'cc ...'命令。将其发布在您的问题的正文中。 –

+0

在MYSY2提示符下,命令'find/c/Users/University/GitHub/simavr -name'libsimavr.a''的输出是什么? –

+0

'$ find/c/Users/University/GitHub/simavr -name'libsimavr.a' /c/Users/University/GitHub/simavr/simavr/obj-i686-w64-mingw32/libsimavr.a' – mgs

回答

0

使用mingw-w64工具链构建项目,您必须从CFLAGS/CXXFLAGS/CPPFLAGS中删除/ usr,/ local,/ lib,/ include中的所有路径,因为此路径可以包含MSYS2自身的标题和库。其次,尝试将“CC = gcc”传递给makefile。