TWI355607B - - Google Patents

Download PDF

Info

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
Application number
TW095112341A
Other languages
English (en)
Other versions
TW200739421A (en
Inventor
Hung Lin Chou
Original Assignee
Sunplus Technology Co Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Sunplus Technology Co Ltd filed Critical Sunplus Technology Co Ltd
Priority to TW095112341A priority Critical patent/TW200739421A/zh
Priority to US11/730,812 priority patent/US7890944B2/en
Publication of TW200739421A publication Critical patent/TW200739421A/zh
Application granted granted Critical
Publication of TWI355607B publication Critical patent/TWI355607B/zh

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/54Link editing before load time
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/70Software maintenance or management
    • G06F8/71Version control; Configuration management
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/44Arrangements for executing specific programs
    • G06F9/445Program loading or initiating
    • G06F9/44557Code layout in executable memory
    • G06F9/44563Sharing

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
TW095112341A 2006-04-07 2006-04-07 Method of dynamically linking function database software devices and sharing static linked source codes with main application program TW200739421A (en)

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)

* Cited by examiner, † Cited by third party
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)

* Cited by examiner, † Cited by third party
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

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) 一种关于模板库编程约定的检查方法