当使用 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;
}
菜单.h:
void display_menu();
int get_input();
但是使用 Xcode,我没有收到任何错误或警告。
这里可能出现什么问题?当我包含文件时似乎是这样的。
最佳答案
因此,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 文件)时,而是当您拥有多文件源时。
关于c++ - C/C++ 项目可以使用 Xcode 编译,但不能使用 gcc/g++ 编译,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20638326/