编辑:包含指向我的makefile的链接
我有一个主程序调用其他源文件中定义的一堆函数。这不是问题,因为我在使用cc -c functionSource.c
cc main.c func1.o func2.o .... -o test.o
当我的一个功能依赖于另一个功能时,我遇到了问题。 例如: 我的主程序调用一个shuffle函数,该函数在它自己的源文件中定义,shuffle函数调用一个swap函数,而swap函数又在它自己的源文件中定义。
当我尝试使用cc -c shuffle.o
为我的主程序生成shuffle.o文件时出现undefined reference to swap
错误。
当我尝试cc shuffle.c swap.o
时出现undefined reference to main
错误。
这是我的makefile
如何修复此问题? 击>
发现了问题。我在insertSort.h和shuffle.h中声明了一个swap函数,但没有实现。
答案 0 :(得分:2)
查看手册页:' - c'使编译器仅生成目标文件(不尝试链接)。
执行以下操作:
cc -c insertionSort.c # => gives insertionSort.o
cc -c -c functionSource.c # => gives functionSource.o
cc insertionSort.o functionSource.o ...and-so-on... main.c -o test
没有必要指定头文件 - 它没有帮助。
顺便说一句:如果你有一个比一个实现文件,它是非常有用的
E.g:
foo.c => foo.o
bar.c => bar
等 - 你得到了照片。
答案 1 :(得分:1)
这与make无关。您需要获得一本关于C编程入门的书,它将解释如何使用预处理器,您需要检查编译器的文档,以便了解不同的编译器标志的作用(例如何时使用{{ 1}}标志,当你不这样做,以及有什么区别)。
在编译行中包含头文件(-c
文件)是错误的。构建对象(.h
)文件时,命令行中只应包含源文件(.c
)。您应该使用.o
指令将所需的标头添加到.c
文件中:#include
。如果您缺少对函数的引用,那么#include "insertionSort.h"
声明该函数的头文件:#include
。