2013-06-26 63 views
0

我使用/usr/bin/gcc進行編譯時,我有一個可以正常工作的makefile。不過,我正在嘗試使用crosstool-ng編譯器進行編譯。我已將CC更改爲交叉編譯器位置,並向保存編譯器的目錄添加了前綴,但是我收到了錯誤編譯。適應交叉編譯的Makefile

Makefile的是在這裏(對不起,這是長):

CFLAGS ?= -Wall -O0 -ggdb3 
PREFIX = /home/me/crosstool-ng-1.18.0/x-tools/i586-system-linux-gnu/ 
CC = /home/me/crosstool-ng-1.18.0/x-tools/i586-system-linux-gnu/bin/i586-system-linux-gnu-gcc 
ALL_CFLAGS = $(CFLAGS) -D_GNU_SOURCE 

.phony: all 
all: food libfood.so.1.0.0 foo_query 

.phony: tools 
tool tools: libfood_print foo_print 

.phony: install 
install: libfood.so.1.0.0 
    cp libfood.so.1.0.0 $(PREFIX)/lib 
cd $(PREFIX)/lib ; \ 
    ln -sf libfood.so.1.0.0 libfood.so.1 ; \ 
    ln -sf libfood.so.1 libfood.so 
cp libfood.h $(PREFIX)/include 
cp foo_data.h $(PREFIX)/include 
cp food $(PREFIX)/bin 
cp foo_query $(PREFIX)/bin 


%.o: %.c 
$(CC) $(ALL_CFLAGS) -c $< 

food: food.o foo.o 
$(CC) $(ALL_CFLAGS) -o [email protected] $^ -lm -lpthread 

libfood.so.1.0.0: libfood.o 
$(CC) -shared -Wl,-soname,libfood.so.1 -o libfood.so.1.0.0 libfood.o 

libfood_print: libfood_print.o 
$(CC) $(ALL_CFLAGS) -o [email protected] $^ -lfood 

foo_print: foo_print.o foo.o 
$(CC) $(ALL_CFLAGS) -o [email protected] $^ -lm -lpthread 

foo_query: foo_query.o 
$(CC) $(ALL_CFLAGS) -o [email protected] $^ -lfood 

food.o: food.c foo.h foo_data.h 
foo.o: foo.c foo.h foo_data.h 
foo_print.o: foo_print.c foo_data.h 
foo_query.o: foo_query.c foo_data.h 
libfood.o: libfood.c libfood.h 
$(CC) $(ALL_CFLAGS) -fPIC -c $< 

foo_print.o: foo_print.c foo.h 

.phony:clean 
clean: 
rm -rf *.o *~ food libfood.so.1.0.0 foo_print libfood_print foo_query 

我收到錯誤消息稱cannot find -lfood collect2: ld returned 1 exit status

如果任何人都可以提出此一修正,我會非常感激。

編輯:我的解決方案:

我也許應該已經更清晰,但這個Makefile是用於構建了被列入buildroot的包。我嘗試了Jonatan的建議,但不幸的是我仍然得到了同樣的錯誤。我的解決方法是使用make -k運行buildroot,然後使用make再次構建。

回答

0

一個簡單的方法來解決,這將是:

ALL_CFLAGS += -L$(PREFIX)/lib 

如果你真的想要安裝的lib的工具鏈,你應該尋找usr/lib目錄,通常的路徑是TOOLCHAIN_DIR/TOOLCHAIN_PREFIX/sysroot/usr/lib

檢查$(PREFIX)/lib目錄中的其他二進制文件,您會注意到它們已編譯爲在您的主機中運行,而不是在您的目標中運行。

編譯器需要檢查目標中的依賴關係,鏈接和執行的文件安裝在sysroot目錄中。