我正在尝试编译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)
答案 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
。
它说它找不到你使用的符号(即函数名);可能,你只是没有链接到包含这些功能的文件。