我对c编码很新,我检查了makefile上的标准参考,但我似乎误解了一些东西,因为我收到了错误。如果有人可以帮助我,我将不胜感激。
这是:
#makefile
all: runme dontrunme
runme: runme.o
clang runme.o -o runme
dontrunme: dontrunme.o library.o fun.o
clang dontrunme.o -o dontrunme
runme.o: library.o runme.c
clang -c runme.c -o runme.o
dontrunme.o: dontrunme.c
clang -c dontrunme.c -o dontrunme.o
library.o: library.c library.h
clang -c library.c -o library.o
fun.o: fun.c fun.h
clang -c fun.c -o fun.o
clean:
rm -f *.o runme dontrunme
我输入make
时收到的错误是:
runme.o:runme.c:function main: error: undefined reference to 'reverse'
reverse
是一个函数,其原型位于library.h
,并在library.c
中定义
非常感谢任何有助于理解我哪里出错的帮助。
编辑:这是runme.c的代码
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "library.h"
int main(int argc, char * argv[]){
char s[] = "Hello World!";
printf("%s\n", s);
reverse(s);
printf("%s\n", s);
}
答案 0 :(得分:3)
改变这个:
runme: runme.o
clang runme.o -o runme
到此:
runme: runme.o library.o
clang runme.o library.o -o runme
对dontrunme
dontrunme: dontrunme.o library.o fun.o
clang dontrunme.o library.o fun.o -o dontrunme
在这两种情况下,您都没有在最终链接中包含所有目标代码文件。
答案 1 :(得分:0)
请按以下方式更改makefile
中的订单。您首先需要library.o
进行构建runme.o
所以请先构建library.o
然后runme.o
library.o: library.c library.h
clang -c library.c -o library.o
runme.o: library.o runme.c
clang -c runme.c -o runme.o