0

我有一个src文件夹,运行make后会创建 4 个.a格式的库。还有一个文件夹tests,其中包含tests.cpp. 该文件依赖于前面提到的库。

我正在尝试获取一个生成内部tests库的 Makefile src(它确实如此),然后使用它们进行编译tests.cpp(这它没有 - 我得到了许多未定义的引用,就好像它没有正确链接一样)。

该文件夹tests包含以下内容Makefile

include ../src/makefile.inc

DIR = ../src
OBJLIBS = ../src/CapaFisica.a ../src/CapaLogica.a ../src/CapaInterfaz.a ../src/Utilitarios.a

TARGETS = tests.cpp
EXE = tests

all : $(EXE)

%.a :
    -for d in $(DIR); do (cd $$d; $(MAKE)); done

tests:  $(OBJLIBS)
    $(CC) $(CFLAGS) $(OBJLIBS) -o $@ $(TARGETS)

clean :
    $(ECHO) Borrando archivos.
    -$(RM) -f ./tests
    cd $(DIR); make clean
    find . -name "*.o" -type f -print | xargs /bin/rm -f

我究竟做错了什么?

4

1 回答 1

2

gcc 链接器对命令行上指定的 .o 文件和静态库的顺序很敏感。

更换

    $(CC) $(CFLAGS) $(OBJLIBS) -o $@ $(TARGETS)

    $(CC) $(CFLAGS) -o $@ $(TARGETS) $(OBJLIBS)

可能有帮助。如果它们相互依赖,还要确保 .a 文件$(OBJLIBS)的顺序正确。依赖库必须位于定义符号的库之前的命令行上。

有关更多详细信息,请参阅此问题:为什么链接库的顺序有时会导致 GCC 中的错误?

于 2013-04-28T00:30:01.277 回答