首页 文章

了解MSYS2下的LD

提问于
浏览
1

我正在尝试使用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以打印$ ,产生以下结果 .

-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)

  • simavr

  • obj-i686-w64-mingw32

据我所知,LD应该能够正确链接,而无需手动复制文件 . 我在这里想念的是什么?

Edit:

链接器错误之前的最后一个命令 .

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

Edit 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

Edit 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提示符会产生相同的结果 .

1 回答

  • 1

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

相关问题