2016-03-29 73 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。