12
A
回答
21
圖書館應該導出初始化 並用gcc __attribute __((構造函數))和__attribute __清理例程((析構))函數屬性。有關這些信息,請參閱gcc信息頁面 。構造函數 例程在dlopen 返回之前執行(或者在main()之前啓動 如果庫在加載 時加載)。在dlclose返回之前執行的析構函數例程爲 (或者,如果在加載 時加載了庫,則在退出()或完成main()後退出 )。這些 函數的C原型是:
void __attribute__ ((constructor)) my_init(void);
void __attribute__ ((destructor)) my_fini(void);
從http://tldp.org/HOWTO/Program-Library-HOWTO/index.html
也就是說,你只是釘在__attribute__((構造函數))帶到你要調用的函數時共享庫被加載。上述文件還指出,舊的_ini和_fini函數被認爲是過時的。
0
15
是的。當一個庫被打開,所有的靜態結構發生......所以,如果你使用C++,你可以這樣做:
// mylibrary.cpp namespace { class dynamic_library_load_unload_handler { public: dynamic_library_load_unload_handler(){ // Code to execute when the library is loaded } ~dynamic_library_load_unload_handler(){ // Code to execute when the library is unloaded } } dynamic_library_load_unload_handler_hook; }
給出不同的解決方案__attribute__ ((constructor))
,這將是便攜。但請注意,如果您有多個這樣的對象,則無法保證構建/銷燬順序。
相關問題
- 1. linux dlopen當我在進程中調用dlopen()時,是否可以在我的庫中獲取通知?
- 2. 如何查找庫以使用dlopen動態加載它們
- 3. 當UITableView完成滾動時可以通知它嗎?
- 4. 我可以在Linux上動態加載可執行文件嗎?
- 5. 使用通知中心重新加載UITableView可以嗎?
- 6. 在linux下使用dlopen()api時,我可以在_init()函數中添加參數嗎?
- 7. IntelliJ插件卸載時有什麼方法可以通知嗎?
- 8. 可以自動通知嗎?
- 9. 可以ocaml-top加載外部庫嗎?
- 10. 可以從數據庫加載AppDomainSetup.ConfigurationFile嗎?
- 11. Google Analytics可以通過AJAX加載嗎?
- 12. 枚舉通過dlopen加載的共享庫(RTLD_GLOBAL)
- 13. 我可以加載一個dll,使其可以在加載時被刪除嗎?
- 14. Mac OS X應用程序可否阻止dlopen加載庫?
- 15. 在運行時加載Linux庫
- 16. 加載xml時可以轉義嗎?
- 17. 在Linux中使用GLES 2 PowerVR庫時出現Dlopen錯誤?
- 18. Linux載波檢測通知
- 19. 使用dlopen加載庫時收到「未定義符號」錯誤
- 20. C++:使用dlopen()加載共享庫時未定義符號
- 21. 在Linux中加載OpenCV庫?
- 22. 當數據庫更新時,我可以在Yii視圖中獲得通知嗎?
- 23. 用戶看到它後可以刪除/取消通知嗎?
- 24. 用戶在牆上寫信時可以收到通知嗎?
- 25. 我們可以在通知中發送Firebase ServerValue時間戳嗎?
- 26. ember-routemanager可以在加載時動態添加狀態嗎?
- 27. 當使用動態庫(dlopen)時,是否可以通過更改庫文件導致分段錯誤?
- 28. 我可以使用Parse卸載iOS通知需求嗎?
- 29. 我可以在創建PDF時減少加載時間嗎?
- 30. Selenium可以通知腳本錯誤嗎?
最有幫助......謝謝! – jldupont 2009-10-21 17:59:36
注意:非常不便攜。 – Noldorin 2014-12-23 17:16:32