2015-10-19 103 views
1

我試圖獲得Cadventure-txt進行編譯,但我一直收到Undefined symbols for architecture x86_64錯誤。我讀到SO來找到一個可能的解決方案,但迄今爲止,無濟於事。體系結構x86_64的未定義符號:Cadventure-txt

我沒有改變github上可用的文件。如果任何人都可以理解下面的錯誤,這將非常好:)我對C和編程頗爲陌生,所以我對從何處開始調試這樣的錯誤沒有太多線索。

以下是完整的錯誤:

開始 ld
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

你應該提供產生這個錯誤的編譯命令。 – Martin

+0

@Martin:我使用Xcode,它在我構建時發生。如果我嘗試將它編譯爲命令行,我使用:'gcc Cadventure-txt.c -o cadventure adventure.story' –

+0

您無法使用'gcc'編譯'adventure.story'。它不是'c'文件。這會給你另一個錯誤。 – Martin

回答

1

這兩個函數_is_command_is_letter定義爲inline

你說你使用XCode作爲編譯器,它使用了Clang。

默認情況下,Clang在GNU C11模式下構建C代碼,因此它使用inline關鍵字的標準C99語義。在C99中,內聯意味着函數的定義僅用於內聯,並且程序中還有其他定義(不帶內聯)。

但是程序中沒有這些函數的其他定義,因此鏈接時未定義符號的錯誤。

一些解決方案:

  • 定義功能static inline
  • 刪除inline
  • 添加函數的非內聯定義。
  • 在GNU C89模式下編譯爲std=gnu89

閱讀更多關於此here

0

誤差線來自ld,鏈接器。

它說它無法找到您使用使用的符號(即函數名稱)可能,你只是沒有鏈接到包含這些函數的文件。

相關問題