我試圖在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