我使用/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
再次構建。