2

这是我的 C++ 类,部分在类内部定义,部分在外部定义。问题:做 nm 表明类声明中定义的函数不会出现在目标文件中,但外部的会出现。我应该怎么做才能使类中的符号也出现在目标文件中?我正在使用 g++ 4 系列。

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

1 回答 1

1

在类定义中内联定义的函数被编译为内联函数,即这个函数中的代码被“复制”到调用函数。因此,您没有任何专用的内联函数实现,也没有链接器符号。

当您在编译单元中定义非内联方法时,可能是从不同的编译单元调用此函数。因此,此实现需要可以链接的功能。编译器只生成一个函数,其中包括您在链接器映射中找到的标头和(装饰的)名称。

在共享库中使用它没问题,因为编译器需要使用的所有内容都在头文件中定义。有像 STL 这样的库几乎完全只作为头文件实现。

于 2013-04-17T04:32:43.170 回答