[英]Linux g++: linking with static libstdc++ without exporting it
我正在编译应该是LD_PRELOAD
到其他应用程序的共享库(.so)。 我正在使用-static-libgcc -static-libstdc++
与libstdc ++和libgcc静态链接,以避免碎片对象冲突。 但是,这样做会使我将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_PRELOAD加载到c ++应用程序中时,这些符号将覆盖应用程序符号,从而导致意外的行为。
那么,如何在不公开公开所有这些符号的情况下使gcc静态链接到libstdc ++?
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.