【问题标题】:What are the differences between member functions and member variables in terms of symbols?成员函数和成员变量在符号方面有什么区别?
【发布时间】:2021-11-03 11:42:58
【问题描述】:

我正在学习使用__attribute__ ((visibility("default"))) 进行符号导出

// a.cpp
class A
{
public:
     __attribute__ ((visibility("default"))) void func() {;};
     __attribute__ ((visibility("default"))) int cnt;
};

但是我遇到了以下问题

# g++ -c a.cpp 
a.cpp:5:50: warning: ‘visibility’ attribute ignored [-Wattributes]
      __attribute__ ((visibility("default"))) int cnt;
                                                  ^~~

成员函数和成员变量有什么区别? 为什么一个可以导出符号而另一个不能?

【问题讨论】:

  • 您希望(非静态)A::cnt 使用哪个符号?
  • 不相关的问题:你是在root下编译吗?通常非常不鼓励这样做。
  • 我正在学习使用 ... 进行符号导出。 这不适合 C++。您将为您的项目创建一些非常难以诊断的错误。除非您的代码仅公开 C API,但给出的示例并非如此。

标签: c++ shared-libraries symbols symlink


【解决方案1】:

成员函数实际上只是具有特殊签名以容纳隐藏的this 参数的普通函数。因此,您可以将可见性属性附加到它们,就像附加到其他全局函数一样。

相反,成员变量并不对应于全局实体——它们只是类对象占用的内存中偏移量的符号名称。因此,将可见性附加到它们是没有意义的。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-10-22
    • 2011-01-17
    • 2018-12-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多