【发布时间】:2020-06-28 11:55:22
【问题描述】:
#已编辑
我现在在 add.h 和 add.c 这两个简单的文件上进行了测试。
我制作了一个 Makefile 来编译我的程序。这是我的makefile。
# Make file for running the project
CC=gcc
CFLAGS= -Wall -g
LDFLAGS = -include
OBJFILES = add.o
LIB = add.h
TARGET = add
all: ${TARGET}
%.o: %.c
${CC} ${CFLAGS} -c -o $@ $<
${TARGET}: ${OBJFILES}
${CC} ${CFLAGS} -o ${TARGET} ${OBJFILES}
clean:
rm -f $(OBJFILES) $(TARGET) *~
当我跑步时
make add
我收到以下错误:
gcc -Wall -g -c -o add.o add.c
gcc -Wall -g -o add add.o
Undefined symbols for architecture x86_64:
"_b", referenced from:
_main in add.o
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
make: *** [add] Error 1
这是我的代码的 sn-ps
add.c
#include <stdio.h>
#include <stdlib.h>
#include "add.h"
int main(void) {
int a = 10, b=20;
add(a, b);
return 0;
}
add.h
#ifndef __ADD_H_
#define __ADD_H_
extern int a,b;
int add(a,b)
{
return a+b;
}
#endif // __ADD_H_
【问题讨论】:
-
1) 在测试之前不要写这么多代码。 2) 你给事物命名时是否带有前导下划线(例如
_com_task)? 不要。 3) 阅读minimal complete examples上的页面。 -
@BasileStarynkevitch 将查看您提供的来源。谢谢
-
另请阅读Modern C 和n1570,C11 标准。见this C reference,学会使用GDB;在你的情况下没有理由有 3 个头文件。在github 上寻找一些程序的灵感
-
@Beta 实际上是的,我已经为我的所有函数命名,开始或包括 _com_tasks。你认为这可能是问题吗?