繁体   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