c - 运行多个c文件时编译时错误
问题描述
#已编辑
我现在在 add.h 和 add.c 这两个简单的文件上进行了测试。
我制作了一个 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
这是我的代码片段
添加.c
#include <stdio.h>
#include <stdlib.h>
#include "add.h"
int main(void) {
int a = 10, b=20;
add(a, b);
return 0;
}
添加.h
#ifndef __ADD_H_
#define __ADD_H_
extern int a,b;
int add(a,b)
{
return a+b;
}
#endif // __ADD_H_
解决方案
您缺乏实际构建目标文件的规则。现在,一旦它们已经存在,您就只有一个可以将它们全部链接在一起。尝试添加:
%.o: %.c
${CC} ${CFLAGS} -c -o $@ $<
这告诉 make 如何从源文件构建目标文件。
推荐阅读
- docusignapi - Display date as per user timezone and Date format while selecting Date in DocuSign during Signing
- python - Django view - template returned as bytestring (b'')
- python - How do I download all pdfs from a website?
- encryption - Best way to encrypt data
- wordpress - 如何在 docker 上的 wordpress 中上传插件?
- c++ - QComboBox:仅在展开时显示图标
- r - input$(variable storage ID) 不工作但 input$(ID) 工作
- php - PHP function to convert Hex to HSL (Not HSL to Hex)
- python - Kedro: How to pass multiple same data from a directory as a node input?
- c++ - How to write values within nested nodes in a OpenCV -based XML FileStorage?