某些.c文件的一个标头会导致链接器错误

时间:2013-01-29 21:12:49

标签: c header linker makefile

我的设置是这样的:

src/
  dir1/
    header.h
    dir11
      (several files, every including header.h)
  dir2/
  (and so on)

但链接器告诉我undefined reference to (the function which is defined in the subdir "dir11")。标题如下所示:

#ifndef header_h
#define header_h

/* some includes, all protected via ifndef-define-endif */

/* function prototypes for all functions in the 'dir11' subdir */
#endif // header_h

生成文件:

# some variables are defined before...

TARGET=mytarget 
SOURCES= ${shell find ${SRC} -type f -name '*.c'} 
OBJECTS=${foreach x, $(basename $(SOURCES)), $(x).o}

compile: ${OBJECTS}

%.o: %.c 
        ${CC} -c ${CFLAGS} ${HEADERS} $^ -o $@

link:
        ${LD} ${OBJECTS} -o ${TARGET}

如何解决这个问题?为子文件中的每个文件写标题是我想要的最后一种方式,因为它中有大约50个文件!

编辑: 也许这很有用:header.h也包括在内,以便调用函数!在包含else吗?

时,我是否必须将此函数声明为extern

1 个答案:

答案 0 :(得分:0)

你所有的包含守卫都定义不同吗?如果不是,您将获得未定义的参考警告/错误,具体取决于您的编译器设置