簡體   English   中英

在類聲明中定義的C ++函數不會顯示為鏈接器符號

[英]c++ functions defined inside class declaration don't show up as linker symbols

這是我的C ++類,部分在類內部定義,而部分在外部定義。 問題是:執行nm揭示類聲明中定義的函數未顯示在目標文件中,而外部函數顯示在目標文件中。 如何使類中的符號也出現在目標文件中? 我正在使用g ++ 4系列。

class A {
  public: 
    void this_will_not_show_up() { };
    void this_will_show_up();
};
void A::this_will_show_up() { }

在類定義中內聯定義的函數被編譯為內聯函數,即該函數中的代碼被“復制”到調用函數。 因此,您沒有內聯函數的任何專用實現,並且沒有鏈接器符號。

當在編譯單元中定義非內聯方法時,可能是從另一個編譯單元調用了此函數。 因此,此實現需要可以鏈接的功能。 編譯器僅生成一個函數,該函數包括在鏈接器映射中找到的標題和(修飾的)名稱。

在共享庫中使用它時沒有問題,因為編譯器需要使用的所有內容都在頭文件中定義。 像STL這樣的庫幾乎完全只作為標頭實現。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM