c++ - 成员函数和成员变量在符号上有什么区别?

标签 c++ shared-libraries symbols symlink

我正在学习使用 __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;
                                                  ^~~

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

最佳答案

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

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

关于c++ - 成员函数和成员变量在符号上有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69073602/

相关文章:

ruby - libpq.so.5 : cannot open shared object file: No such file or directory -/gds/apps/ruby-1. 9.2-p180/lib/ruby/gems/1.9.1/gems/pg-0.14.1/lib/pg_ext.so

python - 计算 Python 脚本中的符号数

WinDbg 缺少托管代码的符号

c++ - 找不到链接库的符号

c++ - 如何在ubuntu上构建OpenCV 2.4.2进行源代码级调试

c++ - close() 之后的线程中的 epoll_wait()

c++ - 协助乱码翻译

c - 如何从 .o 文件中删除 undefined symbol

c++ - (int*) 在这个程序中有什么意义?

c - 在公共(public)头文件中包含条件是否被认为是好的做法?