TWI355607B - - Google Patents
Download PDFInfo
- Publication number
- TWI355607B TWI355607B TW095112341A TW95112341A TWI355607B TW I355607 B TWI355607 B TW I355607B TW 095112341 A TW095112341 A TW 095112341A TW 95112341 A TW95112341 A TW 95112341A TW I355607 B TWI355607 B TW I355607B
- Authority
- TW
- Taiwan
- Prior art keywords
- library
- static
- function
- variable
- code
- Prior art date
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/54—Link editing before load time
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/70—Software maintenance or management
- G06F8/71—Version control; Configuration management
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/44—Arrangements for executing specific programs
- G06F9/445—Program loading or initiating
- G06F9/44557—Code layout in executable memory
- G06F9/44563—Sharing
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Computer Security & Cryptography (AREA)
- Stored Programmes (AREA)
- Devices For Executing Special Programs (AREA)
Description
1355607. 九、發明說明: 【發明所屬之技術領域】 本發明係關於一種軟體元件的鏈結技術,尤指一種動 態鏈結函式庫軟體元件與主應用程式共享一靜態鏈結程式 5 碼的技術。 【先前技術】 在設計手機開發工具時’為了要實現所見即所得的效 果,通常軟體工具設計業者會針對開發工具環境額外設計 10 支援的動態元件。然而如何讓應用軟體設計者能在設計階 段與執行階段共用一樣的程式碼,將動態元件透過標準化 介面整合到開發環境中,將會是支援動態軟體元件設計者 重要的議題。 習知的動態軟體元件技術中,主要以微軟公司的 15 〇LE/C〇M的設計最為普遍。OLE/COM技術係透過PE32的檔 案格式’來部署每一個OLE/COM元件。由於〇le/C〇M元件 的角色如同動態鏈結函式庫的運作機制,也因此在記憶體 的對應中’所有的元件在彼此互相參考與函式呼叫時,都 可以透過動態的COM界面(COM Interface),鏈結到目前呼 2〇 叫的該OLE/COM元件所存在的記憶體中。也因此,對這樣 的軟體元件設計時’記憶體對應的問題可以完全委由作業 系統内部的記憶體機制來處理》圖1為習知—個應用程式 MainApp.exe同時載入複數個COM元件時的記恒體分佈示 意圖。如圖1所不’應用程式MainApp.exe同時參考複數個 ⑧ 5 COM元件(C0M.DLL#1~ C0M.DLL#4、C0M.0CX#5)。該複 數個COM元件在記憶體時也可以彼此互相參考對方。 而 Borland公司亦利用 BPL(Borland Package Library)的 動態載入套裝(Package)格式,而達到動態載入的功能。對 於用 Delphi 或是 C++ Builder發展工具(development tools)所 開發的軟體而言,若是希望經由執行物件(runtime object) 而節省記憶體,則可透過BPL達成類似於DLL/COM的目 的。其類似動態鏈結函式庫(dynamic link library、DLL)技 術,係透過記憶體對應,讓周邊支援的軟體元件可以依據 需求動態載入到記憶體中。 雖然,目前軟體元件的領域已經有動態載入元件技 術。但對於欲入式系統(embedded system)而言,這類的 動態載入軟體元件反而顯得過於龐大與複雜。因此在嵌入 式系統的領域,通常只有兩種選擇: (1) 軟體元件都透過靜態鏈結設計:此技術除非擁有編 譯(compiler)技術和切割區塊編譯,否則無法實現透過軟體 元件來實現藉由設計工具得到所見即所得效果。 (2) 提供兩種版本的視覺化軟體元件:此技術好處是可 將其中一個版本視覺化軟體元件針對設計工具需求提供介 面,以實現所見即所得的設計效果。但壞處則是對於該視 覺化軟體元件設計人員而言依賴性過高。該視覺化軟體元 件設計工程師必須要付出較大心力。同時對於使用該視覺 化軟體元件的客戶而言’客戶不容易自行設計新的元件加 入其軟體中。 1355607 針對嵌入式系統中動態載入的問題,習知技術係將應 • 用程式編譯成為執行檔,而將週邊的函式庫編譯成為動態 鏈結函式庫(dynamic link library、DLL)。兩者主要都跟核 心函數庫(core.lib)做鏈結。如此雖然可以滿足動態即時載 ,5 入的需求’同時又可以避免必須要特定編譯器技術的限 制。然而此種技術會形成記憶體空間的浪費。圖2為習知一 個應用程式Design_Form.exe同時載入二個動態鏈結函式庫 (DLL)時的記憶體分佈示意圖。如圖2所示,因為該執行權 • (Design一Form.exe)與所有的動態鏈結函式庫(dll)都會跟 10 核心函數庫(core.lib)進行靜態鍵結。因此如果有二個動態 鏈結函式庫(Widget.DLL#l、Widget.DLL#2)與一個執行稽 (Design_Form.exe),就會有三個核心函數庫(c〇re Hb)重複 的程式碼在記憶體中出現,而形成記憶體空間的浪費。由 於有的動態鏈結函式庫(dll)都會有一個靜態鍵結的核心 15 函數庫(core•丨ib)程式瑪。當有的動態鏈結函式庫(DLL)被載 入到記憶體後,反而會形成記憶體空間的浪費。 ^ 針對δ己憶體空間的浪費的問題,另一種解決方法係把 所有的函式庫都透過靜態函式庫鏈結。如圖3所示,由於所 有靜態鏈結的核心函數庫(core.lib)本體都會只有一份,此 20 種方式即可節省記憶體的使用,然而此種技術卻缺乏動態 載入的好處,同時減少使用者對於系統設計上的彈性需 求°因此’習知之檔案系統仍存有諸多之缺失而有予以改 進之必要。 7 ⑧ 【發明内容】 本發月之主要目的係在提供一種動態鍵結函式庫軟體 =件與主應用程式共享靜態鏈結程式碼的方法,俾能讓同 :的軟體7L件程式碼可以透過編譯為動態鍵結函式庫與靜 ^式庫的方式分別在執行階段與設計階段達到一樣的呈 現效果β 本發明之另一目的係在提供一種動態鍵結函式庫軟體 元件與主應用程式共享靜態鍵結程式碼的方法俾能針對 嵌入式系統的需求將同樣的程式碼同時適應於動態載入機 制與靜態鍵㈣機制,以便於讓元件的設計者與使用元件 的應用程式設計者料以享受到跨平台1㈣設計好處。 -本發明之再一目的係在提供一種動態鍵結函式庫軟體 二件與主應用程式共享靜態鏈結程式碼时法,俾能減輕 記憶體需求’並減少開發元件設計者的複雜度。 1 為達成上述之目的,本發明係提出一種動態鏈結函式 庫軟體元件與主應用程式共享靜態鏈結程式碼的方法,該 主應用程式鏈結至少—靜態鍵結函式庫及—程式碼,該方 法包含下列步驟:⑷於线用程式巾,建立駐少一靜態 鏈結函式庫的一函數指標結構,並建立該函數指標結構Ζ 該至夕靜態鍵結函式庫的函數之間的鍵結;(Β)於主應用 程式中,建立該至少一靜態鏈結函式庫的一變數指標,並 建立該變數指標與該至少一靜態鏈結函式庫的變數之間的 鏈結’·(C)將該程式碼中呼叫該至少一靜態鏈結函式庫的函 數轉換為函數指標;(D)將該程式碼中呼叫該至少—靜態鍵 、-〇函式庫的變數轉換為變數指標;⑻編譯該程式碼為動態 鏈’·。函式>$力主應用程式中載入該程式碼的動態鏈結函 式庫並將函數及變數的記憶體位置傳給該動態鏈結函式 【實施方式】 /在本發Θ之動4鍵結函式庫軟體元件與主應用程式共 享靜態鏈結程式碼的方法中,如以需求一個應用程式 Design—F〇nn.exe及兩個動態鏈結函式庫(遍糾胤#1、 10 1(1碑_〇1^#2)而s,本發明之技術係透過Design_Form.exe 載入一個核心函數庫C〇re.Ub,而其他的㈣㈣仙都會透 過函式指標與全域變數指標的方式共用同一個GW,而 減少記憶體的使用量,並達到動態鏈結的目的。 在本發明之動態鍵結函式庫軟體元件與主應用程式共 15享靜態鏈結程式碼的方法中,主要係針對核心軟體函式庫 為靜態鏈結的環境所提出的解決方案。亦即動態元件與引 用動態元件的主程式底層都是透過靜態鍵結函式庫提供基 礎呼叫。經由本發明之技術,同樣的軟體元件程式碼可以 分別編譯為動態鍵結函式庫與靜態函式庫的方式,而分別 2〇在執行階段與設計階段達到-樣的呈現效果。 圖4係本發明之動態鏈結函式庫軟體元件與主應用程 式共享靜態鍵結程式碼的方法之流程圖。該主應用程式 Design一Form.exe鏈結一靜態鏈結函式庫。代Hb及—程式 竭。首先於步驟s物中,於主應用程式Design F_咖中, (§) 9 1355607 建立該靜態鏈結函式庫Core.lib的一函數指標結構,並建立 該函數指標結構與該靜態鏈結函式庫Core.lib的函數之間 的鏈結。 若該靜態鏈結函式庫Core.lib中提供如表1函式與全域 5 變數。
void Func_A(int XI); int Func_B(); char Func_C(char *X2); unsigned long v_A; int v_B; unsigned char v_C; unsigned char *v_D; 15 表1 則於步驟S410中,建立如表2名稱為func_p的函式指標 結構(struct)。並在主應用程式Design_Form.exe中,建立 如表3所示的該函數指標結構func_p與該靜態鏈結函式庫 Core.lib的函數之間的鏈結。 struct func_p{ void (*Func_A)(int XI); int (*Func_B)(); char (*Func_C)(char *X2); }funcs; 25 表2
funcs.Func_A= Func_A; funcs.Func_B= Func_B; funcs.Func_C= Func_C; ID 1355607 表3 ,5 於步驟S420中,於主應用程式Design_Form.exe中,建 立諄靜態鏈結函式庫Core.lib的一變數指標,並建立該變數 指標與該至少一靜態鏈結函式庫的變數之間的鏈結。例 如,建立如表4名稱為variable_p的變數指標。並在主應用 g 程式Design_Form.exe中,建立如表5所示的該變數指標 10 variable_p與該靜態鏈結函式庫Core.lib的變數之間的鏈結。 struct variable_p{ unsigned long *v_A; int *v_B; unsigned char*v_C; unsigned char **v D; 15 _ } variables; 表4 variables.v_A=& v_A; variables.v_B=& v_B; variables.v_C=& v_C; variables.v_D=& v_D; 表5 於步驟S430中,將該程式碼中呼叫該靜態鏈結函式庫 Core.lib的函數轉換為函數指標。如表6所示,例如該程式 (?) 1355607 碼中呼叫該靜態鏈結函式庫Core·lib的voidFunc_A(intXl) 函數,則更換為呼叫一函數指標void (*Func_A)(int XI)。 void (*Func_A)(int XI); int (*Func_B)(); 5 char (*Func_C)(char *X2); 表6 於步驟S440中,將該程式碼中呼叫該靜態鏈結函式庫 Core.lib的變數轉換為變數指標。表7所示,例如該程式碼 中呼叫該靜態鏈結函式庫Core.lib的unsigned long v—A變 10 數,則更換為呼叫一變數指標unsigned long *v_A。 unsigned long *v_A; int *v_B; unsigned char*v_C; unsigned char **v_D; 15 表7 於步驟S450中,編譯該程式碼為動態鏈結函式庫 Widget.DLL,於主應用程式Design_Form.exe中載入該程式 碼的動態鏈結函式庫Widget.DLL,並將靜態鏈結函式庫 Core.lib函數及變數的記憶體位置傳給該動態鏈結函式庫 20 Widget.DLL 0 於步驟S460中,該程式碼的動態鏈結函式庫 Widget.DLL彼載入後,依據主應用程式Design_Form.exe所 傳送的函數及變數的記憶體位置,更正其呼叫該靜態鏈結 函式庫Core.lib的函數及變數0 12 ⑧
Claims (1)
1355607 第9S11234丨號,98年7月修正頁 申請專利範園: 1· 鏈結函式庫軟體元件與主應用 靜態鏈結程式碼的方法,姑+Efe ^ ^ 〜主應用程式鏈結至少一靜態鏈 結函式庫m碼’該方法包含下列步驟: ⑷於主應用程式中’建立該至少一靜態鏈結函式庫 的-函數指標結構,並建立該函數指標結構與該至少一靜 態鏈結函式庫的函數之間的鏈結; (B)於主應用程式中,建域至少-靜態鏈結函式庫 10 的-變數指標’並建立該變數指標與該至少—靜態鍵結函 式庫的變數之間的鍵結; (C) 將該動態鏈結函式庫的程式碼中呼叫到該至少一 靜態鍵結函式庫所屬的函數轉換為對應的函數指標變數= (D) 將該動態鏈結函式庫的程式碼中呼叫到該至少一 靜態鍵結函式庫所屬的變數轉換為對應的變數指標變數; 15 以及 (E) 編譯該動態鏈結函式庫的程式碼為動態鏈結函式 庫,於主應用程式中载入該動態鏈結函式庫,並將函數及 變數的s己憶體位置由主應用程式傳給該動態鏈結函式庫。 2.如申請專利範圍第丨項所述之共享方法,其更包含 20 步驟: (F) 該程式碼的動態鏈結函式庫被載入後,依據主應 用程式所傳送的函數及變數的記憶體位置,更正其呼叫該 至少一靜態鏈結函式庫的函數及變數。 1355607 3. 如申請專利範圍第2項所述之共享方法,其中,於 步驟(F)中,該程式碼的動態鏈結函式庫係利用該函數指標 結構,以動態更正其呼叫該至少一靜態鏈結函式庫的函數。 4. 如申請專利範圍第3項所述之共享方法,其中,於 5步驟(F)中,該程式碼的動態鏈結函式庫係利用該變數^ 標’以動態更正其呼叫該至少一靜態鍵結函式庫的變數。日
18
Priority Applications (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
TW095112341A TW200739421A (en) | 2006-04-07 | 2006-04-07 | Method of dynamically linking function database software devices and sharing static linked source codes with main application program |
US11/730,812 US7890944B2 (en) | 2006-04-07 | 2007-04-04 | Method for sharing static link code by software components in DLL and main program |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
TW095112341A TW200739421A (en) | 2006-04-07 | 2006-04-07 | Method of dynamically linking function database software devices and sharing static linked source codes with main application program |
Publications (2)
Publication Number | Publication Date |
---|---|
TW200739421A TW200739421A (en) | 2007-10-16 |
TWI355607B true TWI355607B (zh) | 2012-01-01 |
Family
ID=38823421
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
TW095112341A TW200739421A (en) | 2006-04-07 | 2006-04-07 | Method of dynamically linking function database software devices and sharing static linked source codes with main application program |
Country Status (2)
Country | Link |
---|---|
US (1) | US7890944B2 (zh) |
TW (1) | TW200739421A (zh) |
Families Citing this family (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US9015727B2 (en) | 2008-04-02 | 2015-04-21 | Qualcomm Incorporated | Sharing operating system sub-processes across tasks |
US9098316B2 (en) * | 2008-09-22 | 2015-08-04 | International Business Machines Corporation | Routing function calls to specific-function dynamic link libraries in a general-function environment |
TWI408605B (zh) * | 2010-12-27 | 2013-09-11 | Giga Byte Tech Co Ltd | 執行使用者空間程式方法、使用其之電腦系統及紀錄媒體 |
US9104504B2 (en) * | 2013-03-13 | 2015-08-11 | Dell Products Lp | Systems and methods for embedded shared libraries in an executable image |
US11200070B2 (en) | 2018-08-03 | 2021-12-14 | International Business Machines Corporation | Dynamic-link library usage based on memory size |
CN111008046B (zh) * | 2019-11-15 | 2022-01-25 | 电子科技大学 | 一种软件化雷达组件跨平台动态加载和动态管理系统 |
CN112948024B (zh) * | 2021-04-15 | 2022-11-04 | 网易(杭州)网络有限公司 | 动态链接库的加载方法、装置、存储介质及电子设备 |
CN116361272B (zh) * | 2023-05-17 | 2023-12-01 | 广东广宇科技发展有限公司 | 一种双态数据链接库的关联调整方法 |
Family Cites Families (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CA2143488C (en) * | 1995-02-27 | 2000-01-11 | Robert Paul Duncan | Dynamic link libraries without linker or loader support |
US6292843B1 (en) * | 1998-01-16 | 2001-09-18 | International Business Machines Corporation | Quick loading of run time dynamic link library for OS/2 |
US6298481B1 (en) * | 1998-10-30 | 2001-10-02 | Segasoft, Inc. | System for modifying the functionality of compiled computer code at run-time |
US20030131347A1 (en) * | 2001-10-12 | 2003-07-10 | Allison David S. | Method and apparatus for runtime binding of object members |
US20040123308A1 (en) * | 2002-12-20 | 2004-06-24 | Siemens Information And Communication Networks, Inc. | Hybird of implicit and explicit linkage of windows dynamic link labraries |
-
2006
- 2006-04-07 TW TW095112341A patent/TW200739421A/zh unknown
-
2007
- 2007-04-04 US US11/730,812 patent/US7890944B2/en not_active Expired - Fee Related
Also Published As
Publication number | Publication date |
---|---|
US7890944B2 (en) | 2011-02-15 |
TW200739421A (en) | 2007-10-16 |
US20070288913A1 (en) | 2007-12-13 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
TWI355607B (zh) | ||
US11467854B2 (en) | Method and apparatus for loading multiple differing versions of a native library into a native environment | |
Tanter et al. | A versatile kernel for multi-language AOP | |
CN101040259A (zh) | 运行期动态链接 | |
Pichler et al. | On aspectualizing component models | |
CN104461582A (zh) | 业务处理方法、装置以及设备 | |
Pessemier et al. | Components, ADL & AOP: Towards a Common Approach. | |
Narayan et al. | Gobi: WebAssembly as a practical path to library sandboxing | |
US20140181592A1 (en) | Diagnostics of declarative source elements | |
CN102566993B (zh) | 界面编辑方法及装置 | |
Kang et al. | Extended service registry for distributed computing support in osgi architecture | |
WO2010029812A1 (ja) | マルチコアにおけるプログラミングシステム、その方法及びそのプログラム | |
JP2005122452A (ja) | プログラミング容量を低減化するアセンブラ、コンパイラ、リンカ、及びプログラム開発支援システム | |
EP2171578A1 (en) | Programming model for modular development | |
Mukherjee et al. | Develop once deploy anywhere achieving adaptivity with a runtime linker/loader framework | |
CN100555224C (zh) | 一种可执行的动态连接库car构件的构造和执行方法 | |
Kell | The mythical matched modules: overcoming the tyranny of inflexible software construction | |
Takeshita et al. | Method Shells: avoiding conflicts on destructive class extensions by implicit context switches | |
EP2828746A1 (en) | Methods of distributing a computer program product, and a computer system | |
JP5845788B2 (ja) | 実行制御プログラム、実行制御装置および実行制御方法 | |
Fleming et al. | System-level linking of synthesised hardware and compiled software using a higher-order type system | |
CN102375740A (zh) | 手持装置及利用其实现Java组件与自定义构件互操作的方法 | |
Lozano | The Unison manual | |
Cohen et al. | NDK and C/C++ optimization | |
CN105022653A (zh) | 一种关于模板库编程约定的检查方法 |