C语言 使用一个头文件链接到由几个库和目标文件组成的静态库



我正在处理一个相当大且混乱的项目,我没有真正的时间来清理,我的任务是为它提供API。我要做的是将所有丑陋的东西包装在一个静态库中,然后提供一个头文件。

但是当尝试使用头文件和库构建可执行文件时,我得到了一堆"未定义的引用"错误。我想如果我提供所有的头文件就可以了,但是我真的不想这样做。

现在makefile看起来像这样(为了简单起见略有改变):

myprog.elf : libgiant_lib.a main.o
    gcc -pg -o $@ main.o -lgiant_lib
main.o : main.c
    gcc -c $(CFLAGS) $(SOME_INCLUDES) $< -o $@
libgiant_lib.a : $(A_BUNCH_OF_LIBS) $(COUPLE_OF_OBJS) api.o
    ar rcs $@ $^
api.o : api.c api.h
    gcc -c $(CFLAGS) $(INCLUDES_FOR_BUNCH_OF_LIBS) $< -o $@

我已经检查了libgiant_lib.a存档,它似乎包含了它应该包含的所有库和目标文件。但是,指向它的链接仍然不起作用。

在我看来,您的包含文件可能有其他包含文件的引用。因此,您需要提供一个标志来指示这些包含文件的位置。我建议提供位置(包含所有include文件的目录),如

INCL_DIR =/include/dir/位置

,并使用-I标志将其包含在编译阶段。例如,api.o的规则将变成

api.o: api.c api.h
        gcc -c $(CFLAGS) -I$(INCL_DIR) $(INCLUDES_FOR_BUNCH_OF_LIBS) $< -o $@

相关内容

  • 没有找到相关文章

最新更新