libstdc++ 卸载问题
今天,同事花了一下午时间,终于查到了 周末我碰到的问题 的根本原因。
是因为,GLU 是用 C++ 实现的,而导致 libstdc++.so 会跟随它卸载,而 libstdc++.so 本身有一个 bug ,导致程序崩溃。
当然,显露这个 bug 还有一个前提,我的程序是纯 C 写的,完全没有用到 libstdc++ 。
有兴趣的同学可以查看这个帖子:http://unix.derkeiler.com/pdf/Mailing-Lists/FreeBSD/stable/2006-05/msg00719.pdf
大约是说,crtbeginS.o (C 的运行时库)里有个叫 __deregister_frame_info
的弱符号在 libstdc++.so 加载的时候被重定位到这个 so 的代码段里了,并且在程序退出的时候会运行到。
但是程序退出前,libstdc++.so 已经被卸载,这就会导致进程运行到不存在的地址空间。
以上问题存在于 libstdc++.so.5 ,我在 libstdc++.so.6 下测试貌似没有问题了。
Comments
Posted by: aJie | (3) May 7, 2014 05:16 PM
Posted by: mikeshi | (2) March 26, 2009 04:52 PM
Posted by: chu | (1) March 26, 2009 10:26 AM