- 论坛徽章:
- 0
|
用C++ STL做的动态库,即使用-fvisibility=hidden编译,在代码中用attribute导出少量接口,
但实际的dynsym中还是有许多不需要的函数,最后发现编译时就会生成一此非hidden的函数,
下面是objdump的输出:- 0000000000000000 w F .text._ZN4SLUTC2ERKS_ 00000000000000c6 .hidden SLUT::SLUT(SLUT const&)
- 0000000000000000 w F .text._ZN4SLUTC2ERKS_ 00000000000000c6 .hidden SLUT::SLUT(SLUT const&)
- 0000000000000000 w F .text._ZSt24__uninitialized_fill_n_aIP4SLUTmS0_S0_EvT_T0_RKT1_RSaIT2_E 000000000000011d void std::__uninitialized_fill_n_a<SLUT*, unsigned long, SLUT, SLUT>(SLUT*, unsigned long, SLUT const&, std::allocator<SLUT>&)
- 0000000000000000 w F .text._ZSt22__uninitialized_copy_aIN9__gnu_cxx17__normal_iteratorIPK4SLUTSt6vectorIS2_SaIS2_EEEEPS2_S2_ET0_T_SB_SA_RSaIT1_E 000000000000012a SLUT* std::__uninitialized_copy_a<__gnu_cxx::__normal_iterator<SLUT const*, std::vector<SLUT, std::allocator<SLUT> > >, SLUT*, SLUT>(__gnu_cxx::__normal_iterator<SLUT const*, std::vector<SLUT, std::allocator<SLUT> > >, __gnu_cxx::__normal_iterator<SLUT const*, std::vector<SLUT, std::allocator<SLUT> > >, SLUT*, std::allocator<SLUT>&)
复制代码 后面两个没有hidden属性。这个是GCC存在问题,还是说在C++中使用还需要什么额外的编译选项?
目前我只能用version script在链接阶段进一步屏蔽。 |
|