C / C ++项目使用Xcode编译,但不使用gcc / g ++编译

时间:2013-12-17 15:37:32

标签: c++ c xcode gcc

使用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我没有错误或警告。

这可能是什么问题?当我包含文件时,似乎就是这样。

2 个答案:

答案 0 :(得分:2)

所以,gcc抱怨它不知道display_menuget_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