我拥有一个静态库" My.a",我的静态库是一个纯C库。我的静态库内部链接到另一个C ++静态库" Yours.a"因此,无论谁使用我的库都必须链接libstdc ++,因为我的库依赖于libstdc ++。
有一个节目" Final_Exec"它与libstdc ++动态链接,并且还静态链接到我的库。
当我启动这个可执行文件时,当这个可执行文件完成执行并且calles退出时,我得到一个分段错误和下面的堆栈跟踪
*** glibc detected *** ./stage-O/bin/amd64/CATS: double free or corruption (!prev): 0x0000000016846b80 ***
======= Backtrace: =========
/lib64/libc.so.6[0x2ac1f98e54af]
/lib64/libc.so.6(cfree+0x4b)[0x2ac1f98e97ab]
/slowfs/swe82/abhish_temp/clientstore/v35/stage- O/lib/amd64/libstdc++.so.6(_ZNSsD1Ev+0x1f)[0x2ac1f91820af]
/lib64/libc.so.6(exit+0xe5)[0x2ac1f98a7255]
~basic_string destructor is throwing exception while freeing the global string.
如果我删除了对库的依赖性,那么只是为了解决问题" Yours.a"从我的库中,然后将其链接到可执行文件,我没有得到分段错误。
这个final_executable也链接到其他共享库,如boost,QT等,它们也依赖于libstdc ++,libstdc ++在这些共享库中动态链接。
有人能为这个问题提供任何合理的结论吗?
很抱歉没有提供任何代码,但我不拥有任何此代码,我只是拥有" My.a"库是C库,但我认为这个问题与C ++库混合在一起。