簡體   English   中英

編譯時出現未定義的參考錯誤

[英]Undefined reference error while compiling

當我鍵入以下命令時,我正在嘗試編譯具有多個* .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

嘗試:

$ gcc main.o gestic.o menu.o

-o filename:將輸出放置在filename中

$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 $@ $<

首先,不包括頭文件,其次,您可以使用不包含定義的函數。

消息中未定義的對“ function_name”的引用意味着您要提供給鏈接器的所有目標文件中,沒有一個具有function_name的定義。 這意味着

您未與* .o * .c鏈接(編譯時)不包含function_name的定義-通過“編譯時”,我的意思是指您在其上使用的所有各種預處理程序選項。

在這里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 $@ $^

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM