據我所知,在退出主函數時,程序(用Linux中的C++編寫)調用__cxa_finalize
。我創建一個共享庫並在主函數中使用這個庫。當主程序加載/卸載這個庫時,我想採取一些行動。我發現功能__attribute__
可以在創建共享庫時,可以使用用於這一目的(該函數將在共享庫代碼我想實現)__cxa_finalize和__attribute__
我增加不便等:
void __attribute__ ((constructor)) my_load(void);
void __attribute__ ((destructor)) my_unload(void);
和我在下面的鏈接中實現了函數my_load和my_unload: http://tdistler.com/2007/10/05/implementing-dllmain-in-a-linux-shared-library
問題在於退出主函數時處理這些函數的順序是什麼? my_unload()
功能還是__cxa_finalize
?
更明確的說,是否有可能確保在__cxa_finalize之前執行析構函數(my_unload)函數,即破壞全局C++對象?我想停止my_unload函數內的一些線程。 – bugra
嘗試析構函數屬性的優先參數。 –
如何設置優先級?我在Internet上發現的是:void __attribute__((constructor))my_load(void); void __attribute__((destructor(2000)))my_unload(void); __cxa_finalize()__attribute__((init_priority(1999)));在這種情況下,編譯器會提供錯誤:爲析構函數屬性指定的參數數量錯誤。另一點是我應該爲__cxa_finalize設置優先級還是默認優先級?我的gcc版本是4.1.2 – bugra