Makefile和链接.a库

时间:2013-04-27 23:52:24

标签: c++ makefile static-libraries

我有一个src文件夹,在运行make后,会以.a格式创建4个库。 还有一个文件夹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

我做错了什么?

1 个答案:

答案 0 :(得分:2)

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

更换

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

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

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

有关详细信息,请参阅此问题:Why does the order in which libraries are linked sometimes cause errors in GCC?