如何处理共享库调用 exit() 并意外破坏全局对象?

问题描述 投票:0回答:1

应用程序使用 librpm.so,它通过调用

exit()
来处理一些错误,例如 当它收到 SIGPIPE 时。这会导致 glibc 破坏本地静态对象,而其他线程正在访问它们,从而导致崩溃。

有没有办法让应用程序在 glibc 开始销毁静态实例之前进行清理(取消初始化使用线程的模块)?这些模块是从编译的共享库启动的。

linux multithreading shared-libraries glibc
1个回答
0
投票

您可以在图书馆接收 SIGPIPE 之前主动捕获它。

示例:https://www.thegeekstuff.com/2012/03/catch-signals-sample-c-code/

© www.soinside.com 2019 - 2024. All rights reserved.