使用gcc,g ++或make在终端中编译一个小C或C ++项目时,我遇到了这些错误:
/tmp/ccG1caGi.o: In function `main':
main.c:(.text+0xa): undefined reference to `display_menu'
main.c:(.text+0xf): undefined reference to `get_input'
collect2: ld returned 1 exit status
main.c中:
#include "menu.h"
int main()
{
display_menu();
get_input();
return 0;
}
menu.h:
void display_menu();
int get_input();
但是使用Xcode我没有错误或警告。
这可能是什么问题?当我包含文件时,似乎就是这样。
答案 0 :(得分:2)
所以,gcc抱怨它不知道display_menu
和get_input
的位置,他们正在做什么或如何将它们链接起来,这是正确的。
您可能有更多源文件,其中定义了这些函数(也许是menu.c
)。如果是这样,请将它们添加到编译指令中:
gcc main.c menu.c
或者,只需使用-c
标志编译成一个对象(稍后等待函数)。这不会生成可执行文件,但会创建一个等待最终编译的目标文件
gcc main.c -c # Make the main.o object
gcc menu.c main.o # Link the main.o object with a compiled menu.c
进入最终的可执行文件。
Xcode很可能完全了解所有源文件,并乐于将它们全部放在编译步骤中。如果你是手动完成的,你必须自己做一些工作。它不是当您包含文件(h文件)时,而是当您有多文件源时。
答案 1 :(得分:0)
尝试使用基本Makefile
:
CC=gcc
CFLAGS=-W -Wall
LDFLAGS=
SRC= $(wildcard *.c)
OBJ= $(SRC:.c=.o)
all: myexec
myexec: $(OBJ)
@$(CC) -o $@ $^ $(LDFLAGS)
%.o: %.c
@$(CC) -o $@ -c $< $(CFLAGS)
.PHONY: clean
clean:
@rm -rf *.o