2016-02-13 99 views
0

我無法顯示代碼(作爲其專有)。我有一個文件調用其他地方定義的類的方法,所以我包含該類的頭文件。我的IDE intellisense可以確定方法的位置。但是,在編譯和安裝二進制文件之後,當我運行該應用程序時,它崩潰引用上述類中缺少的符號。共享庫不包含包含方法的符號?

我檢查了庫符號(使用nm),並且我缺少一個。

我的問題是,考慮到我已經包含標題,還有什麼其他可能的事情可以解釋爲什麼符號丟失?如果從另一個頭部有一個相同的方法簽名,那麼這兩個(而不是無)都將在共享庫中列出嗎?

問題是否與cmake沒有連接第二個頭?我怎麼能檢查這個?

回答

1

考慮到我已經包含標題,還有什麼其他可能的事情可以解釋爲什麼符號缺失?

包括標題是從來沒有足以得到一個符號;你的必須也鏈接到其他類的對象文件(或庫)。

問題是否與cmake問題,它沒有鏈接第二個頭?

你很困惑:頭文件在連接中根本不起任何作用,只有目標文件和庫都有。

您的困惑的一個可能的來源:Microsoft編譯器支持神奇的#pragma comment(lib, "foo")。如果你在其中包含pragma的標題,然後將你的對象提供給鏈接器,它會方便地自動將foo.lib附加到你的鏈接行。

UNIX鏈接器通常沒有這樣的「黑魔法」,整個功能被認爲是一些錯誤