0

我有一个 makefile 在我编译时可以正常工作/usr/bin/gcc。但是我正在尝试使用 crosstool-ng 编译器对其进行编译。我已将 CC 更改为交叉编译器位置,并在包含编译器的目录中添加了一个前缀,但编译时出现错误。

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 $@ $^ -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 $@ $^ -lfood

foo_print: foo_print.o foo.o
$(CC) $(ALL_CFLAGS) -o $@ $^ -lm -lpthread

foo_query: foo_query.o
$(CC) $(ALL_CFLAGS) -o $@ $^ -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 的建议,但不幸的是我仍然遇到了同样的错误。我的解决方法是使用 运行 buildroot make -k,然后使用make.

4

1 回答 1

0

解决这个问题的一个简单方法是:

ALL_CFLAGS += -L$(PREFIX)/lib

如果你真的想在工具链中安装你的 lib,你应该寻找 usr/lib 目录,通常路径是TOOLCHAIN_DIR/TOOLCHAIN_PREFIX/sysroot/usr/lib

检查目录中的其他二进制文件$(PREFIX)/lib,您会注意到它们被编译为在您的主机中运行,而不是在您的目标中。

编译器需要检查依赖关系、链接和在目标中执行的文件安装在sysroot目录中。

于 2013-06-26T14:05:24.713 回答