我有一个自定义头文件example.h,它有一些函数的原型。我实现了一个.C文件example.c,其中包含“includes”(#include“example.h”),并具有在example.h中具有原型的函数的实现。现在,我有另一个函数test.c,它调用example.h中的原型函数并在example.c中定义。
我的make文件如下
test: test.o
gcc -o test -g test.o
test.o: test.c example.c example.h
gcc -g -c -Wall test.c
gcc -g -c -Wall example.c
clean:
rm -f *.o test
我得到关于example.c中定义的函数的以下消息
未定义首次引用 文件中的符号
function1 test.o
function2 test.o
function3 test.o
function4 test.o
ld:致命:符号引用错误。没有输出写入测试
collect2:ld返回1退出状态
* 错误代码1
make:致命错误:目标`test'命令失败
非常感谢任何帮助。
答案 0 :(得分:2)
%.o: %.c
gcc -c -g -o $@ $^
test: test.o example.o
gcc -o -g $@ $^
%.o: %.c
这意味着任何*.o
文件都应根据其提交的等效格式c
构建。
示例test.o
应该来自test.c
,而example.o
应该来自example.c
答案 1 :(得分:1)
首先,您必须在生成可执行文件时包含example.o文件:gcc -o test example.o test.o
。然后,您为目标test.o编写的依赖项不正确。你应该像这样分开它:
test: test.o example.o
gcc -o test test.o example.o
test.o: test.c
gcc -c -Wall test.c
example.o: example.c
gcc -c -Wall example.c
然后,考虑使用变量来存储目标文件的名称,要传递给链接器/编译器的标志等......这将使您的生活更轻松。
答案 2 :(得分:0)
test.o: test.c example.c example.h
gcc -g -c -Wall test.c
gcc -g -c -Wall example.c
根据您的代码test.o目标是调用test.c example.c example.h目标,我无法看到。