1、前言
為了使程式友善擴充,具備通用性,可以采用插件形式。采用異步事件驅動模型,保證主程式邏輯不變,将各個業務已動态連結庫的形式加載進來,這就是所謂的插件。linux提供了加載和處理動态連結庫的系統調用,非常友善。本文先從使用上進行總結,涉及到基本的操作方法,關于動态連結庫的本質及如何加載進來,需要進一步學習,後續繼續補充。如何将程式設計為插件形式,挖掘出主題和業務之間的關系,需要進一步去學習。
2、生産動态連結庫
編譯參數 gcc -fPIC -shared
例如将如下程式編譯為動态連結庫libcaculate.so,程式如下:


編譯如下: gcc -fPIC -shared caculate.c -o libcaculate.so
3、dlopen、dlsym函數介紹
在linux上man dlopen可以看到使用說明,函數聲明如下:


dlopen以指定模式打開指定的動态連接配接庫檔案,并傳回一個句柄給調用程序,dlerror傳回出現的錯誤,dlsym通過句柄和連接配接符名稱擷取函數名或者變量名,dlclose來解除安裝打開的庫。 dlopen打開模式如下:
RTLD_LAZY 暫緩決定,等有需要時再解出符号
RTLD_NOW 立即決定,傳回前解除所有未決定的符号。
采用上面生成的libcaculate.so,寫個測試程式如下:


編譯選項如下:gcc -rdynamic -o main main.c -ldl
測試結果如下所示:
參考資料:
<a href="http://blog.chinaunix.net/uid-26285146-id-3262288.html">http://blog.chinaunix.net/uid-26285146-id-3262288.html</a>
<a href="http://www.360doc.com/content/10/1213/22/4947005_77867631.shtml">http://www.360doc.com/content/10/1213/22/4947005_77867631.shtml</a>
本文轉自張昺華-sky部落格園部落格,原文連結:http://www.cnblogs.com/sky-heaven/p/7505861.html,如需轉載請自行聯系原作者