架构x86_64的未定义符号:Cadventure-txt

时间:2015-10-19 18:44:05

标签: c clang

我正在尝试编译Cadventure-txt,但我一直收到Undefined symbols for architecture x86_64错误。我在SO上阅读以找到可能的解决方案,但到目前为止,无济于事。

我没有对github上可用的文件进行任何更改。如果有人能够理解以下错误,那将是非常好的:)我对C和编程很新,所以我不知道从哪里开始调试这样的错误。

这里有完整的错误:

Undefined symbols for architecture x86_64:
  "_is_command", referenced from:
      _init in main.o
      _play in main.o
  "_is_letter", referenced from:
      _init in main.o
      _play in main.o
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)

2 个答案:

答案 0 :(得分:1)

两个函数_is_command_is_letter定义为inline

你说你正在使用XCode作为编译器,它使用Clang。

默认情况下,Clang在GNU C11模式下构建C代码,因此它使用inline关键字的标准C99语义。在C99中,内联意味着函数的定义仅用于内联,并且程序中的其他位置还有另一个定义(没有内联)。

但是程序中没有其他这些函数的定义,因此链接时未定义符号的错误。

一些解决方案:

  • 将函数定义为static inline
  • 删除inline
  • 为函数添加非内联定义。
  • 使用std=gnu89在GNU C89模式下编译。

详细了解此here

答案 1 :(得分:0)

ld开头的错误行来自链接器ld

它说它找不到你使用的符号(即函数名);可能,你只是没有链接到包含这些功能的文件。