c++ - C/C++ 项目可以使用 Xcode 编译,但不能使用 gcc/g++ 编译

标签 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;
}

菜单.h:

void display_menu();
int get_input();

但是使用 Xcode,我没有收到任何错误或警告。

这里可能出现什么问题?当我包含文件时似乎是这样的。

最佳答案

因此,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 文件)时,而是当您拥有多文件源时。

关于c++ - C/C++ 项目可以使用 Xcode 编译,但不能使用 gcc/g++ 编译,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20638326/

相关文章:

ios - 我可以在模拟器中运行旧的应用存档吗?

xcode - Swift:如何子类化 UIButton?

c++ - SDL 2 通过 SpriteManager 在屏幕上显示图像,获取指针中断

c++ - 多 channel 图像中的 calcCovarMatrix 和 Unresolved 断言错误

c++ - 自定义协议(protocol)的 SSL 或 TLS 加密

c - 使用 g++ 和 gcc 获取line

xcode - 折叠 NSOutlineView Group 后如何保持选中行状态

c++ - GMock 的 `WillOnce` 和 `Return` 不会因错误的返回值而失败

c - scanf 格式说明符中的星号是什么意思?

C sha1 实现不适用于 Unix