在类声明中定义的c ++函数不会显示为链接器符号

时间:2013-04-17 03:21:01

标签: c++ linker

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

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

1 个答案:

答案 0 :(得分:1)

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

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

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