当我输入以下命令时,我正在尝试编译一个包含多个* .c文件和* .h文件的项目:
$gcc -c -I ../hdr main.c gestic.c menu.c
hdr文件夹是* .h文件所在的位置,创建.o文件,但是当我尝试使用以下命令链接它们时:
$gcc -o main.o gestic.o menu.o
我看到错误
gestic.c:(.text+0x..): undefined reference to functions that are declared in *.h files
答案 0 :(得分:1)
$gcc -Wall -c -I../hdr -o main.o main.c
$gcc -Wall -c -I../hdr -o menu.o menu.c
$gcc -Wall -c -I../hdr -o gestic.o gestic.c
$gcc -Wall -o myprogram main.o menu.o gestic.o
使用Makefile对于此任务非常常见
示例(未经测试)Makefile:
CC=gcc
CFLAGS=-Wall -I../hdr
all: myprogram
myprogram: main.o menu.o gestic.o
$(CC) -o $@ $^
gestic.o: gestic.c
$(CC) $(CFLAGS) -c -o $@ $<
main.o: main.c
$(CC) $(CFLAGS) -c -o $@ $<
menu.o: menu.c
$(CC) $(CFLAGS) -c -o $@ $<
答案 1 :(得分:0)
尝试:
$ gcc main.o gestic.o menu.o
-o filename:将输出放在文件名
中答案 2 :(得分:0)
首先不包括头文件,其次你可以使用不包含定义的函数。
消息未定义参考&#39; function_name&#39;意味着您要为链接器提供的所有目标文件中没有一个具有function_name的定义。这意味着要么
您未与* .o链接 * .c(已编译)不包含function_name的定义 - 由编译后的&#39;我的意思是你使用的所有各种预处理器选项。
此处 - Iinclude/
试,
gcc -c file.c -I<include_dir>
如果您编译更多文件以使makefile创建这些文件的对象,请将这些对象与标题链接起来。
示例makefile,
CC = gcc
CFLAGS = -Wall
INCLUDE = sample.h
OBJ = samople1.o sample2.o
%.o: %.c $(INCLUDE)
$(CC) $(CFLAGS) -c -o $@ $<
go: $(OBJ)
gcc $(CFLAGS) -o $@ $^