2013-07-30 45 views
2

我在编译一个应该是LD_PRELOAD编辑到其他应用程序的共享对象(.so)。我使用-static-libgcc -static-libstdc++静态链接libstdC++和libgcc以避免分片对象冲突。然而,这样做会让我在libstdC++中将所有的东西公开为公共符号。当我做Linux g ++:与静态libstdC++链接而不导出它

nm -D mylib.so 

我得到了很多的东西一样

00000000000714e0 W _ZNKSt15basic_streambufIcSt11char_traitsIcEE4gptrEv 
0000000000071530 W _ZNKSt15basic_streambufIcSt11char_traitsIcEE4pptrEv 
00000000000714d0 W _ZNKSt15basic_streambufIcSt11char_traitsIcEE5ebackEv 
00000000000714f0 W _ZNKSt15basic_streambufIcSt11char_traitsIcEE5egptrEv 
0000000000071540 W _ZNKSt15basic_streambufIcSt11char_traitsIcEE5epptrEv 
0000000000071520 W _ZNKSt15basic_streambufIcSt11char_traitsIcEE5pbaseEv 
00000000000712a0 W _ZNKSt15basic_streambufIcSt11char_traitsIcEE6getlocEv 

这是不好的,因为当这种等都将LD_PRELOADed成C++应用程序,这些符号将要重写应用程序的符号,引起意外的行为。

那么我怎样才能使gcc链接静态地libstdC++而不公开地暴露所有这些符号?

回答

相关问题