2015-11-02 101 views
2

未定義的符號我是一個相當初級程序員(如我只代碼時,我需要),但我主要是在電視臺工作。我一直在嘗試編譯工具,我下載(bmdtools)編譯OSX上,因爲我們(無論何種原因)不準使用Linux機器。使錯誤:對建築x86_64的

所以,安裝所有的庫和鏈接,我需要什麼之後,我跑了「製造」,並得到了錯誤消息:

ld: symbol(s) not found for architecture x86_64 

我然後閱讀,添加-stdlib =的libC++就解決什麼問題正在被反映。這次它完成了,創建了所有應該創建的三個文件。但是,這三個文件是完全空白的。零字節。

任何幫助或洞察力將不勝感激。謝謝!

+0

好要看是什麼符號丟失您將如何解決這一問題。你可能會1)缺少一兩個庫。 2)忘記鏈接一個目標文件。 3)未能定義方法或功能。 4)通過稍微不標準的編譯器設置隱藏了符號。沒有人知道,直到你提供更多的細節。 – trojanfoe

+0

我將如何能夠知道我錯過了什麼?我沒有寫這個代碼。 –

+0

錯誤信息會告訴你。 – trojanfoe

回答

2

ld: symbol(s) not found for architecture x86_64

我一直認爲這個消息很混亂,因爲人們傾向於關注消息的「for architecture x86_64」部分。這裏的實際問題是找不到符號。所以,實際上,這是什麼意思?

如果我們創建了一個類並聲明瞭一個函數,但是沒有實現該函數的主體,那麼會出現同樣的錯誤,因爲編譯/鏈接器進程已經被告知函數存在但找不到它。

對於體系結構x86_4找不到的符號下方的行通常會標識未找到的內容。

讓我們來看一個例子: -

class PGGui 
{ 
    public: 
     PGGui::PGGui(QObject*) 
     { 
      DoSomeStuff(); 
     } 

    private: 
     DoSomeStuff(); 
}; 

enter image description here

這就告訴我們,一類PGGui已宣佈的功能DoStuff,這是從PGGui構造函數引用:PGGui::PGGui(QObject*),但功能體無法找到。

正如你所看到的,在這裏,只是望着錯誤消息的第一行沒有太大幫助。您需要閱讀其餘的錯誤以查看缺少的內容,這可能是函數的主體,或者包含庫或其他對象。

你會發現軟件開發變得更容易,如果你首先想要了解的錯誤信息,而不是簡單地尋找錯誤的網頁,並希望其他人的問題和解決方案符合你自己的。

+0

感謝您的信息,我追溯到它,我需要定義一個變量,以找到所有這些信息。謝謝! –