我正在努力将多个文件编译成一个通用程序。我收到错误:
undefined reference to 'pi'
这是我的代码和 Makefile 的框架。我究竟做错了什么?谢谢!
文件:calcPi.c
#include <stdlib.h>
#include <stdio.h>
#include <sched.h>
#include <string.h>
#include "pi.h"
int main(int argc, char* argv[]) {
long iterations = 1000000;
int policy = 2;
int numChildren = 3;
pi(iterations, policy, numChildren);
return 0;
}
文件:pi.h
void pi(long iterations, int policy, int numChildren);
文件:pi.c
#include "pi.h"
void pi(long iterations, int policy, int numChildren) {
//lots of code here
}
我正在使用 Makefile 来编译它:
CC = gcc
CFLAGS = -c -g -Wall -Wextra
LFLAGS = -g -Wall -Wextra
all: calcPi pi
calcPi: calcPi.o
$(CC) $(LFLAGS) $^ -o $@ -lm
pi: pi.o
$(CC) $(LFLAGS) $^ -o $@ -lm
calcPi.o: calcPi.c
$(CC) $(CFLAGS) $<
pi.o: pi.c
$(CC) $(CFLAGS) $<
clean:
rm -f pi calcPi
rm -f *.o
rm -f *~
编辑:响应整个错误消息的请求:
在函数“main”中” calcPi.c:55:对“pi”的 undefined reference collect2:错误:ld 返回 1 退出状态 make: * [calcPi.o] 错误 1
最佳答案
首先,pi真的应该是一个单独的应用程序吗?
您引用了 calcPi 中的 pi() 函数,但它仅被编译为 pi.o,因此您需要将其添加为依赖项。
我认为您想要做的是使用 calcPi.o 和 pi.o 对象文件创建 calcPi。
CC = gcc
CFLAGS = -c -g -Wall -Wextra
LFLAGS = -g -Wall -Wextra
all: calcPi
calcPi: calcPi.o pi.o
$(CC) $(LFLAGS) $^ -o $@ -lm
calcPi.o: calcPi.c
$(CC) $(CFLAGS) $<
pi.o: pi.c
$(CC) $(CFLAGS) $<
clean:
rm -f calc
rm -f *.o
rm -f *~
关于编译: undefined reference to,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15370214/