main.o:main.c:function main:错误:未定义引用'variable_name'

时间:2014-04-22 15:54:22

标签: c

我是C的完全新手(6小时前开始)我知道有很多在线参考资料我应该(并且将会)详细查看,但就目前而言,我有紧急情况需要帮助。我有一个包含以下文件的项目文件夹:

boundary_val.c
boundary_val.h
helper.c
helper.h
init.c
init.h
main.c
main.o
sor.c
sor.h
uvp.c
uvp.h
visual.c
visual.h
makefile

main.c应该调用列出的文件中找到的其他函数。

makefile的内容如下:

CC = gcc
CFLAGS = -Wall -pedantic -Werror
.c.o:  ; $(CC) -c $(CFLAGS) $<

OBJ =   helper.o\
        init.o\
        boundary_val.o\
        uvp.o\
        main.o\
        sor.o\
        visual.o


all:  $(OBJ)
    $(CC) $(CFLAGS) -o sim $(OBJ)  -lm

%.o : %.c
    $(CC) -c $(CFLAGS) $*.c -o $*.o

clean:
    rm $(OBJ)

helper.o      : helper.h 
init.o        : helper.h init.h 
boundary_val.o: helper.h boundary_val.h 
uvp.o         : helper.h uvp.h
visual.o      : helper.h
sor.o         : sor.h

main.o        : helper.h init.h boundary_val.h uvp.h visual.h sor.h

当我在终端中运行make main时,我收到以下错误:

gcc   main.o   -o main
main.o:main.c:function main: error: undefined reference to 'read_parameters'
main.o:main.c:function main: error: undefined reference to 'matrix'
main.o:main.c:function main: error: undefined reference to 'matrix'
main.o:main.c:function main: error: undefined reference to 'matrix'
main.o:main.c:function main: error: undefined reference to 'matrix'
main.o:main.c:function main: error: undefined reference to 'init_uvp'
main.o:main.c:function main: error: undefined reference to 'calculate_dt'
main.o:main.c:function main: error: undefined reference to 'boundaryvalues'
main.o:main.c:function main: error: undefined reference to 'calculate_fg'
main.o:main.c:function main: error: undefined reference to 'calculate_rs'
main.o:main.c:function main: error: undefined reference to 'sor'
main.o:main.c:function main: error: undefined reference to 'calculate_uv'
main.o:main.c:function main: error: undefined reference to 'write_vtkFile'
main.o:main.c:function main: error: undefined reference to 'write_vtkFile'
main.o:main.c:function main: error: undefined reference to 'free_matrix'
main.o:main.c:function main: error: undefined reference to 'free_matrix'
main.o:main.c:function main: error: undefined reference to 'free_matrix'
main.o:main.c:function main: error: undefined reference to 'free_matrix'
collect2: ld returned 1 exit status
make: *** [main] Error 1

这些未定义的引用是在其他文件中定义并使用以下内容链接到main.c文件的函数:

#include "helper.h"
#include "visual.h"
#include "init.h"
#include "sor.h"
#include "boundary_val.h"
#include "uvp.h"
#include <stdio.h>

似乎make正在阅读main.o而不是main.c,有人可以告诉我发生了什么事吗?

编辑:

运行make clean并收到此错误:

rm helper.o init.o boundary_val.o uvp.o main.o sor.o visual.o
rm: cannot remove `helper.o': No such file or directory
rm: cannot remove `init.o': No such file or directory
rm: cannot remove `boundary_val.o': No such file or directory
rm: cannot remove `uvp.o': No such file or directory
rm: cannot remove `sor.o': No such file or directory
rm: cannot remove `visual.o': No such file or directory
make: *** [clean] Error 1

1 个答案:

答案 0 :(得分:0)

当您致电make main时,您实际上正在使用目标make调用main,这在您的makefile中不存在。目标all是在未指定目标时构建的特殊目标,在这种情况下仅使用make。当您调用make main时,未找到名为main的目标,因此make推断它应使用已存在的main.o目标文件构建该目标。你可以从

行看到这一点
gcc   main.o   -o main

此外,您应该将-f标志添加到rm目标中的clean命令,以便它忽略不存在的文件(您只想清除所有内容)。< / p>

clean:
    rm -f $(OBJ)

TLDR;您应该单独使用make来构建all目标。

有关如何构建makefile的更多信息,请参阅此makefile教程:http://www.gnu.org/software/make/manual/make.html#Introduction