【发布时间】:2011-07-19 20:08:05
【问题描述】:
我在 gcc 下使用 -fvisibility=hidden 编译以下代码:
template<class T> struct /*__attribute__ ((visibility("default")))*/ A {};
template<class T> struct B
{
B() __attribute__ ((visibility("default")));
};
template<class T> B<T>::B() {}
template class B<int>;
template class B<A<int> >;
如果我通过 nm | 运行生成的目标文件grep B,我明白了
000000000002b97c t B<A<int> >::B()
000000000002b972 t B<A<int> >::B()
000000000002b968 T B<int>::B()
000000000002b95e T B<int>::B()
即,B<int> 是可见的,但 B<A<int> > 是不可见的。如果我取消注释 sn-p 标记 A<T> 为可见,B<A<int> > 变为可见。但是,我不想将所有 A 标记为可见,因为在实际代码中 A<T> 包含大量应该保持私有的方法。
为什么A<T> 的可见性会影响B<A<T> > 的可见性?我可以让B<A<T> > 可见而不使所有A<T> 可见吗?
【问题讨论】:
标签: c++ templates gcc visibility symbols