在共享库中,函数 func1() 具有 atexit(terminate_global) 并且此共享库没有“属性((constructor))”和“属性((destructor))”。
因此,程序流程如下:
1) 应用程序使用 dlopen 加载共享库。
2) 应用程序使用 dlsym 调用 func1()。
3) func1() 有 atexit(terminate_global)。
4) func1() 返回。
5) 应用程序调用 dlclose 取消分配库。
在上述步骤中,我没有发现在卸载库时调用了 atexit()。那么,如果在取消分配共享库时必须调用 atexit(),那么正确的方法应该是什么?我应该使用属性((constructor)) 和属性((destructor)) 函数属性导出例程,以便可以调用 atexit 注册函数吗?