2014-04-20 79 views
4

我試圖交叉編譯形式的Ubuntu友好的手臂,但我發現了奇怪的錯誤:重定位在一般ELF(EM:40)

[email protected]:/home/kevin/Desktop/makef# make ARCH=arm CROSS_COMPILE=arm-none-linux-gnueabi-l 
gcc -o main obj/main.o obj/serial.o obj/fb.o obj/menu_main.o obj/timer.o obj/cmdin.o obj/buzzer.o obj/statemachine.o obj/inout.o obj/network.o obj/text_file_input.o obj/text_file_input_oven.o -I./ -lgd -lrt 
/usr/bin/ld: obj/main.o: Relocations in generic ELF (EM: 40) 
obj/main.o: could not read symbols: File in wrong format 
collect2: ld returned 1 exit status 
make: *** [main] Error 1 

命令行:讓ARCH =手臂CROSS_COMPILE =掰無-Linux的gnueabi-1

的Makefile:(更新)更新後的Makefile

export ARCH:=arm 
export CROSS_COMPILE:=arm-none-linux-gnueabi 

IDIR =./ 
CC=arm-linux-gnueabi-gcc 
CFLAGS=-I$(IDIR) 

LD= //opt/FriendlyARM/toolschain/4.5.1/arm-none-linux-gnueabi/bin/ 

ODIR=obj 
LDIR =./ 

LIBS=-lgd -lrt 

_DEPS = main.h Makefile 
DEPS = $(patsubst %,$(IDIR)/%,$(_DEPS)) 

_OBJ = main.o serial.o fb.o menu_main.o timer.o cmdin.o buzzer.o statemachine.o inout.o network.o text_file_input.o text_file_input_oven.o 
OBJ = $(patsubst %,$(ODIR)/%,$(_OBJ)) 


$(ODIR)/%.o: %.c $(DEPS) 
    $(CC) -c -o [email protected] $< $(CFLAGS) 

main: $(OBJ) 
    $(CC) -o [email protected] $^ $(CFLAGS) $(LIBS) 

.PHONY: clean 

clean: 
    rm -f $(ODIR)/*.o *~ core $(INCDIR)/*~ 

新的錯誤:

[email protected]:/home/kevin/Desktop/makef# make ARCH=arm CROSS_COMPILE=arm-none-linux-gnueabi -l 
gcc -o main obj/main.o obj/serial.o obj/fb.o obj/menu_main.o obj/timer.o obj/cmdin.o obj/buzzer.o obj/statemachine.o obj/inout.o obj/network.o obj/text_file_input.o obj/text_file_input_oven.o -I./ -lgd -lrt 
/usr/bin/ld: obj/main.o: Relocations in generic ELF (EM: 40) 
obj/main.o: could not read symbols: File in wrong format 
collect2: ld returned 1 exit status 
make: [main] Error 1 (ignored) 
arm-linux-gnueabi-gcc -o main obj/main.o obj/serial.o obj/fb.o obj/menu_main.o obj/timer.o obj/cmdin.o obj/buzzer.o obj/statemachine.o obj/inout.o obj/network.o obj/text_file_input.o obj/text_file_input_oven.o -I./ -lgd -lrt 
/usr/lib/gcc/arm-linux-gnueabi/4.6/../../../../arm-linux-gnueabi/bin/ld: warning: libz.so.1, needed by /usr/lib/gcc/arm-linux-gnueabi/4.6/../../../../arm-linux-gnueabi/lib/../lib/libgd.so, not found (try using -rpath or -rpath-link) 
/usr/lib/gcc/arm-linux-gnueabi/4.6/../../../../arm-linux-gnueabi/bin/ld: warning: libexpat.so.1, needed by /usr/arm-linux-gnueabi/lib/libfontconfig.so.1, not found (try using -rpath or -rpath-link) 
/usr/arm-linux-gnueabi/lib/libfontconfig.so.1: undefined reference to `XML_GetBuffer' 
/usr/arm-linux-gnueabi/lib/libfontconfig.so.1: undefined reference to `XML_GetErrorCode' 
/usr/lib/gcc/arm-linux-gnueabi/4.6/../../../../arm-linux-gnueabi/lib/../lib/libgd.so: undefined reference to `compress' 
/usr/arm-linux-gnueabi/lib/libfreetype.so.6: undefined reference to `inflate' 
/usr/arm-linux-gnueabi/lib/libfontconfig.so.1: undefined reference to `XML_SetDoctypeDeclHandler' 
/usr/arm-linux-gnueabi/lib/libfontconfig.so.1: undefined reference to `XML_ParserCreate' 
/usr/arm-linux-gnueabi/lib/libpng12.so.0: undefined reference to `crc32' 
/usr/arm-linux-gnueabi/lib/libfontconfig.so.1: undefined reference to `XML_GetCurrentLineNumber' 
/usr/lib/gcc/arm-linux-gnueabi/4.6/../../../../arm-linux-gnueabi/lib/../lib/libgd.so: undefined reference to `uncompress' 
/usr/arm-linux-gnueabi/lib/libpng12.so.0: undefined reference to `deflateReset' 
/usr/arm-linux-gnueabi/lib/libpng12.so.0: undefined reference to `deflate' 
/usr/arm-linux-gnueabi/lib/libfontconfig.so.1: undefined reference to `XML_SetCharacterDataHandler' 
/usr/arm-linux-gnueabi/lib/libfontconfig.so.1: undefined reference to `XML_ParserFree' 
/usr/arm-linux-gnueabi/lib/libfontconfig.so.1: undefined reference to `XML_SetUserData' 
/usr/arm-linux-gnueabi/lib/libpng12.so.0: undefined reference to `deflateInit2_' 
/usr/arm-linux-gnueabi/lib/libfontconfig.so.1: undefined reference to `XML_ParseBuffer' 
/usr/arm-linux-gnueabi/lib/libfreetype.so.6: undefined reference to `inflateEnd' 
/usr/arm-linux-gnueabi/lib/libpng12.so.0: undefined reference to `deflateEnd' 
/usr/arm-linux-gnueabi/lib/libpng12.so.0: undefined reference to `inflateInit_' 
/usr/arm-linux-gnueabi/lib/libfontconfig.so.1: undefined reference to `XML_ErrorString' 
/usr/arm-linux-gnueabi/lib/libfontconfig.so.1: undefined reference to `XML_SetElementHandler' 
/usr/arm-linux-gnueabi/lib/libfreetype.so.6: undefined reference to `inflateInit2_' 
/usr/arm-linux-gnueabi/lib/libfreetype.so.6: undefined reference to `inflateReset' 
collect2: ld returned 1 exit status 
make: *** [main] Error 1 
[email protected]:/home/kevin/Desktop/makef# 

makefile在你的評論(謝謝)後生效,並創建一個主文件唯一的錯誤即時得到的是:警告:格式不是字符串文字和格式參數[-Wformat-security]但它dossent似乎是關鍵

+0

您現在發佈的輸出(截至18:50)與您的Makefile不匹配。 – duskwuff

+0

你是什麼意思? –

+0

輸出表明編譯器正在運行兩次,一次是'gcc'(或可能'cc'),第二次是'arm-linux-gnueabi-gcc'。在你的問題中,這對於Makefile的版本是不可能的。 – duskwuff

回答

4

書面,這個Makefile被打破了交叉編譯 - 它不堅持用$(CC)變量,因此它不能編譯成非原生架構。

爲了解決這個問題,在該節改變cc$(CC)main,即:

main: $(OBJ) 
- gcc -o [email protected] $^ $(CFLAGS) $(LIBS) 
+ $(CC) -o [email protected] $^ $(CFLAGS) $(LIBS) 
+0

更新生成文件後出現一些其他錯誤 –

+0

'-'和'+'用作補丁指示符,而不是Makefile中的文本文本。涉及libz和libexpat的錯誤似乎表明您的交叉編譯系統沒有正確安裝這些庫。 – duskwuff

+0

@kevinver您現在發佈的錯誤是鏈接器錯誤,您似乎使用了必須鏈接到的各種庫,例如libz,libpng和libxml2以及其他可能的。 (你也可能需要先交叉編譯) – nos

5

它看起來像你以前試圖編譯與不同的工具鏈(例如x86),並且目標文件仍然來自該構建。

嘗試使用

make clean 
+0

make clean返回'rm -f obj/*。o *〜core/*〜'並刪除所有的.o文件。當我運行讓我得到相同的錯誤 –

+0

啊,是的,我注意到@duskwuff已經發現了另一個問題 - 這是相同的「錯誤類型」(混合工具),但是由不同的場景引起的。 –

+0

更新了@duskwuff建議的結果 –

0

我有一個類似的問題,乾淨沒有幫助。我結束了刪除生成文件夾和重建,它的工作。