国产精品1024永久观看,大尺度欧美暖暖视频在线观看,亚洲宅男精品一区在线观看,欧美日韩一区二区三区视频,2021中文字幕在线观看

  • <option id="fbvk0"></option>
    1. <rt id="fbvk0"><tr id="fbvk0"></tr></rt>
      <center id="fbvk0"><optgroup id="fbvk0"></optgroup></center>
      <center id="fbvk0"></center>

      <li id="fbvk0"><abbr id="fbvk0"><dl id="fbvk0"></dl></abbr></li>

      一種軟件工程源代碼的分割方法

      文檔序號:6601168閱讀:393來源:國知局
      專利名稱:一種軟件工程源代碼的分割方法
      技術(shù)領域
      本發(fā)明涉及一種軟件工程源代碼的分割方法,屬于軟件復用與軟件安全的復合交叉的技術(shù)領域。
      背景技術(shù)
      20世紀60年代的“軟件危機”使得程序設計人員明白了難于維護的軟件成本極其 高昂。當軟件的規(guī)模不斷擴大時,龐大軟件的綜合成本可以說是沒有人能夠承受的,并且, 即使投入了高昂的研發(fā)資金,也難以得到可靠的產(chǎn)品。此時,產(chǎn)生的軟件復用思想就成為解 決該問題的一種根本途徑。軟件復用(Soft Ware Reuse)是充分利用現(xiàn)有軟件的各種相關(guān)知識,再用于研發(fā) 新的軟件,以縮減軟件開發(fā)和維護的經(jīng)費?,F(xiàn)在,軟件復用已經(jīng)成為提高軟件生產(chǎn)力和質(zhì)量 的一種重要技術(shù)。早期的軟件復用主要是代碼級復用,被復用的知識專指程序。后來,逐漸 擴大到包括領域知識、開發(fā)經(jīng)驗、設計決定、體系結(jié)構(gòu)、用戶需求和涉及設計、代碼與文檔等 軟件的所有方面。但是,軟件復用注重的是從構(gòu)件庫中挑選構(gòu)件,以組裝完成一個完整的應用系統(tǒng)。 然而,目前對于構(gòu)件是如何生成的,還缺乏一種可實施的自動化方案。而本發(fā)明關(guān)注的正是 這個難點從單個軟件工程中提取部分源代碼,生成一個動態(tài)鏈接庫或靜態(tài)鏈接庫軟件工 程,再將生成的鏈接庫文件與原來剩余的代碼組裝合成一個完整的軟件工程,這就要用到 軟件分割技術(shù)。軟件分割技術(shù)是將一個軟件文本分割成兩個或多個軟件子文本的技術(shù)。目前的軟 件分割技術(shù)包括文件分割,音、視頻分割和圖像分割等;但是,還沒有一種軟件源代碼分割 的技術(shù)方案。文件分割和音、視頻分割大都屬于線性分割的范疇,這類分割的技術(shù)比較簡 單,只需測試或識別片段的邊界,并不關(guān)心其內(nèi)部結(jié)構(gòu)。圖像分割則稍微復雜一些,要把圖 像中具有特殊涵義的不同區(qū)域區(qū)分開來,而且這些區(qū)域是互不相交的,每個區(qū)域都要滿足 特定區(qū)域的一致性。常見的圖像分割方法有基于閥值的分割、基于邊緣的分割和基于區(qū)域的分割等。 基于閥值的分割是將圖像分為若干小塊,再通過某種算法對每個小塊計算得出一個具體數(shù) 值后,將該數(shù)值與特定的閥值相比較,大于閥值的歸為一類,小于閥值的歸為另一類?;?邊界的分割方法是利用不同區(qū)域間的像素灰度的不連續(xù)特點檢測出區(qū)域間的邊緣,從而實 現(xiàn)圖像分割?;趨^(qū)域的分割就是把具有某種相似性質(zhì)的像素連通,從而構(gòu)成最終的分割 區(qū)域。動態(tài)鏈接庫DLL (Dynamic Link Library)是一個包含有可供多個程序同時使用的 代碼和數(shù)據(jù)的庫。它提供了一種使進程可以調(diào)用不屬于其可執(zhí)行代碼的函數(shù)的方法。該函 數(shù)的可執(zhí)行代碼位于一個DLL中,該DLL包含一個或多個已被編譯、鏈接并與使用它們的進 程分開存儲的函數(shù)。DLL還有助于共享數(shù)據(jù)和資源。多個應用程序可同時訪問內(nèi)存中單個 DLL副本的內(nèi)容。
      靜態(tài)鏈接庫是人們通常使用的擴展名為.lib的文件,因為庫中的代碼最后要連 接到可執(zhí)行文件中,所以靜態(tài)連接的可執(zhí)行文件一般都比較大。它不同于擴展名為.dll 的動態(tài)鏈接庫。在靜態(tài)鏈接庫里,函數(shù)和數(shù)據(jù)被編譯到一個二進制文件(通常擴展名為
      LIB), 在鏈接過程中,Visual C++的編譯器將從靜態(tài)鏈接庫中恢復這些函數(shù)和數(shù)據(jù),并把 它們和應用程序中的其他模塊組合在一起,生成可執(zhí)行文件。這個過程稱為“靜態(tài)鏈接”。 此時,因為應用程序所需要的全部內(nèi)容都是從庫中復制出來的,所以靜態(tài)鏈接庫本身并不 需要與可執(zhí)行文件一起發(fā)行。據(jù)申請人所掌握的材料,目前,還沒有發(fā)現(xiàn)對軟件工程的源代碼直接進行分割。而 且,如果用人工直接對軟件工程的源代碼進行手工分割,既麻煩,又要花費很多時間。因此, 如何能夠?qū)浖こ痰脑创a實現(xiàn)自動分割,或者僅需與用戶執(zhí)行少量而友好的交互的相 關(guān)技術(shù),就成為業(yè)內(nèi)科技人員關(guān)注的熱點。

      發(fā)明內(nèi)容
      有鑒于此,本發(fā)明的目的是提供一種軟件工程源代碼的分割方法,該方法是對軟 件工程的源代碼直接進行分割,而且,操作步驟簡單、容易,能夠快速地將一個軟件工程分 割為可執(zhí)行文件、靜態(tài)鏈接庫或動態(tài)鏈接庫,既為軟件復用創(chuàng)造條件,又將關(guān)鍵代碼替換為 鏈接庫,為源代碼的保護和隱藏作出貢獻。為了達到上述目的,本發(fā)明提供了一種軟件工程源代碼的分割方法,其特征在于 該方法是將一個軟件工程的源代碼進行分割后,產(chǎn)生兩個新的軟件工程第一個是從該軟 件工程中提取出來部分可重用的源代碼所生成的鏈接庫文件,以供重用在其他軟件工程而 節(jié)約軟件開發(fā)成本;第二個是將該軟件工程分割后的剩余源代碼與所述新生成的鏈接庫文 件合并得到的軟件工程,第二個軟件工程經(jīng)過編譯生成的可執(zhí)行文件的功能與分割前的該 軟件工程的功能相同,但是第二個軟件工程中的部分關(guān)鍵代碼轉(zhuǎn)化為鏈接庫,實現(xiàn)了隱藏 和保護源代碼的目的。本發(fā)明的特點是首創(chuàng)提出一種能夠自動實現(xiàn)的對軟件工程的源代碼進行分割的 具體技術(shù)方案,本發(fā)明將一個待分割的C或C++軟件工程分割為一個鏈接庫軟件工程A和 合并后的軟件工程B (參見圖1所示)。其中,第一個軟件工程A是獨立的動態(tài)鏈接庫或靜 態(tài)鏈接庫的軟件工程。在軟件開發(fā)過程中,為節(jié)約成本而實現(xiàn)的軟件復用,往往要從現(xiàn)有的 軟件工程中提取出一部分可重用的源代碼生成鏈接庫文件,以便重用在其他軟件中。第二 個軟件工程B是將所生成的鏈接庫文件替換分割出去的源代碼而得到的,其功能與原來待 分割的的軟件工程一致。由于鏈接庫文件的種種優(yōu)點,軟件開發(fā)者需要將軟件工程中的部 分代碼轉(zhuǎn)化為鏈接庫的形式,或者出于代碼保護的考慮,將關(guān)鍵代碼替換為鏈接庫,實現(xiàn)隱 藏源代碼的目的。本發(fā)明方法的創(chuàng)新特點是該方法支持對編譯環(huán)境的擴充,雖然目前的操作步驟 針對的是C或C++程序的代碼,但是,眾所周知,不同的編譯環(huán)境的最大差異是配置文件和 編譯過程,只要在其中有差異的地方進行選擇處理,就可以實現(xiàn)所擴充的編譯環(huán)境。所以, 本發(fā)明具有很好的擴充性能。本發(fā)明的分割方案必須先滿足依賴關(guān)系,也就是,它是本發(fā)明 軟件工程可執(zhí)行分割的必要條件,然后,再在這些可行方案中選出可能的最優(yōu)方案。另外, 本發(fā)明的分割方案是由用戶定制的,具有一定的靈活性分割出去的軟件工程的類型可以是動態(tài)鏈接庫或靜態(tài)鏈接庫,而剩余的源代碼與新建的動態(tài)鏈接庫或靜態(tài)鏈接庫合并生成 的新的第二個軟件工程的類型則與原來待分割的軟件工程類型一致。本發(fā)明方法還對分割 后的軟件工程進行了編譯,生成相應的軟件工程文件,為應用提供了便利。本發(fā)明方法適用性廣,只要是進行軟件開發(fā)的企業(yè)和個人,都能夠利用該方法非 常簡單、方便地從已經(jīng)完成的軟件工程中快速地提取可重用部分,以將生成的動態(tài)鏈接庫 或靜態(tài)鏈接庫單獨地用于其他軟件工程項目,也可以用作構(gòu)件庫,如同圖5所示那樣,利用 本發(fā)明方式提取多個庫文件構(gòu)成構(gòu)件庫,以供實現(xiàn)軟件復用時進行選擇和組合使用。因此, 本發(fā)明有很好的推廣應用前景。


      圖1是本發(fā)明軟件工程源代碼的分割方法示意圖。圖2是本發(fā)明軟件工程源代碼的分割方法操作步驟流程圖。圖3是本發(fā)明方法中的調(diào)用VC編譯器進行編譯操作的步驟圖。圖4是本發(fā)明方法中在Iinux下動態(tài)鏈接庫的調(diào)用操作流程圖。圖5是利用本發(fā)明方法實現(xiàn)軟件工程復用的示意圖。
      具體實施例方式為使本發(fā)明的目的、技術(shù)方案和優(yōu)點更加清楚,下面結(jié)合附圖對本發(fā)明作進一步 的詳細描述。參見圖1,本發(fā)明是一種軟件工程源代碼的分割方法,該方法是將一個待分割的軟 件工程的源代碼進行分割后,產(chǎn)生兩個新的軟件工程第一個是從該待分割的軟件工程中 提取出來部分可重用的源代碼所生成的鏈接庫文件(其類型為由用戶選擇的動態(tài)鏈接庫 或靜態(tài)鏈接庫),以供重用在其他的軟件工程而節(jié)約軟件開發(fā)成本;第二個是將該待分割 的軟件工程分割后的剩余源代碼與新生成的鏈接庫文件(即第一個軟件工程)合并得到的 軟件工程;第二個軟件工程經(jīng)過編譯生成的可執(zhí)行文件的類型與功能與分割前的待分割軟 件工程的類型與功能相同,但是將該待分割軟件工程中的部分關(guān)鍵代碼轉(zhuǎn)化為鏈接庫,實 現(xiàn)了隱藏和保護源代碼的目的。本發(fā)明方法適用于使用C或C++程序語言編寫的代碼,由于操作系統(tǒng)和編譯器的 多樣性,不可能囊括所有的編譯環(huán)境,目前本發(fā)明方法只能夠適用于當前主流的編譯環(huán)境, 例如 Iinux 操作系統(tǒng)下的 GNU (GNU' s Not Unix)的 C 編譯器 GCC (GNU C Compiler)禾Π GNU 的C++編譯器G++,以及微軟公司的windows操作系統(tǒng)下的VC編譯器(Microsoft Visual C++);以后可以進行擴充。GNU是一個自由軟件的計劃工程,代表一種開源的軟件開發(fā)精 神。參見圖2,介紹本發(fā)明方法的具體操作步驟(1)先分析用戶指定的待分割軟件工程是否為C或C++語言所編寫,以及該待分割 軟件工程所適用的編譯環(huán)境是否為該方法所支持;如果不是,則提示用戶重新指定軟件工 程,或者結(jié)束該流程;如果是,則順序執(zhí)行步驟(2)。(2)分析該待分割軟件工程的語法,提取每個源文件中的類和函數(shù),以供用戶選擇 準備分割出去的軟件工程的源文件;再對該源文件進行實時動態(tài)分析,使之滿足編譯依賴性,再由用戶指定分割出去的軟件工程類型為動態(tài)鏈接庫或靜態(tài)鏈接庫;其中編譯依賴性 是一個源文件的編譯要依賴于其他源文件的特性,例如B依賴A,則用戶選中A的同時,B 也同時被選中了。(3)開始分割先選中要分割出來的目標源文件,找到其所在的路徑及其依賴的 頭文件;再將其從所在文件夾內(nèi)刪除,并移至新建的鏈接庫軟件工程文件夾內(nèi)。(4)完成編譯前的檢測對該新建的鏈接庫軟件工程進行完整性分析,如遇到缺 失的全局變量、宏或資源文件等,或者該新建的鏈接庫軟件工程內(nèi)需要用到待分割軟件工 程中的其他鏈接庫文件時,都從該待分割軟件工程中拷貝之。(5)生成該鏈接庫軟件工程的配置文件和修改頭文件,使該鏈接庫軟件工程成為 分割后生成的第一個軟件工程,且其中定義的函數(shù)和類都能夠被外部其他軟件工程調(diào)用。根據(jù)不同的編譯器,該步驟(5)包括下述兩種不同的操作方法如果待分割的軟件工程為VC軟件工程,則執(zhí)行下述操作步驟(501)生成配置文件從該待分割的軟件工程拷貝擴展名為.dsw的工作區(qū)文件 至新的鏈接庫軟件工程,再根據(jù)用戶選擇的類型,將相應的擴展名為.dsp的庫文件配置模 板.dsp拷貝到該鏈接庫軟件工程的目錄中;再將擴展名為.dsw和.dsp文件重命名為用戶 指定的軟件工程名,搜索并替換擴展名為.dsp文件中所有軟件工程名都為用戶指定的軟 件工程名;然后,依照模板格式將該鏈接庫軟件工程中所有源文件、頭文件和資源文件全部 寫入到該擴展名為dsp的配置文件的末尾。(502)修改頭文件修改該鏈接庫軟件工程中的頭文件,使定義的函數(shù)和類變?yōu)?可輸出;其具體操作內(nèi)容為若用戶選擇的軟件工程類型為靜態(tài)鏈接庫LIB,則將所有類聲 明和函數(shù)聲明都包含在關(guān)鍵詞exterm “C”的括號內(nèi)。若用戶選擇的軟件工程類型為動態(tài)鏈接庫DLL,則在頭文件中使用函數(shù)調(diào)用規(guī)范 declspec引出輸出函數(shù),并包含在關(guān)鍵詞extern” C”括號內(nèi),或者生成相應的DEF文件。如果待分割的軟件工程為GCC或G++軟件工程,則執(zhí)行下述操作步驟在新建的鏈接庫軟件工程內(nèi)生成配置文件makefile,如果用戶選擇生成靜態(tài)鏈接 庫,關(guān)鍵操作是將目標源文件中的函數(shù)生成靜態(tài)鏈接庫文件*. a ;如果用戶選擇生成動態(tài) 鏈接庫,則要用-shared編譯選項,以生成動態(tài)鏈接庫*. so ;如果用戶選擇生成動態(tài)鏈接 庫,還要修改頭文件,若原來的函數(shù)聲明為返回值類型函數(shù)名(參數(shù));則先改為返回值 類型(*函數(shù)名)(參數(shù))的形式。需要說明動態(tài)函數(shù)與靜態(tài)函數(shù)的原型不同之處是,動態(tài)函數(shù)應使用(*函數(shù)名)的 形式,以便引用其指針。若要引用文件中的動態(tài)函數(shù)說明,在原待分割軟件工程的主文件 中,用戶應該定義一下SHARED宏,這樣才能使用。(6)對該新生成的鏈接庫軟件工程進行編譯,將頭文件和編譯生成的庫文件一并拷貝到所述待分割軟件工程被分割后的剩余源代碼中。根據(jù)不同的編譯器,該步驟(6)包括下述兩種不同的操作步驟如果待分割的軟件工程為VC軟件工程,則執(zhí)行下述操作步驟(參見圖3)(601)找到VC的安裝目錄%后,先設置VC環(huán)境變量,執(zhí)行VC安裝目 錄中的批處理文件VCVARS32. BAT ;然后轉(zhuǎn)到該鏈接庫軟件工程的目錄下執(zhí)行編譯命令 msdev% PROJECTB% . dsp 或 MAKE" all-ffin32 Release"。
      (602)完成編譯后,將生成的庫文件和所有修改后的頭文件都復制到分割后的第一個軟件工程、即該鏈接庫軟件工程中;如果為靜態(tài)鏈接庫,則生成擴展名為.lib的文件, 如果為動態(tài)鏈接庫,則分別生成擴展名為.dll的文件和.Lib的文件;為方便調(diào)用,將擴展 名為lib的文件也一同復制到該鏈接庫軟件工程中。如果待分割的軟件工程為GCC或G++軟件工程,則執(zhí)行下述操作步驟(611)對鏈接庫軟件工程進行編譯,生成庫文件;如果為靜態(tài)鏈接庫,就將生成擴 展名為a的庫文件*. a復制至該鏈接庫軟件工程,如果為動態(tài)鏈接庫,則將生成擴展名為so 的庫文件*. so復制至Iinux系統(tǒng)的庫文件目錄/lib下,再將頭文件拷貝回該鏈接庫軟件 軟件工程目錄。(7)對步驟(6)合并得到的第二個軟件工程中的源文件進行修改,使其能夠找到 步驟(4)所生成的新建的鏈接庫文件。根據(jù)不同的編譯器,該步驟(7)包括下述兩種不同的操作步驟如果待分割的軟件工程為VC軟件工程,則執(zhí)行下述操作步驟(701)用progma comment加載所生成的擴展名為LIB的庫文件,如果步驟(5)所 生成的為動態(tài)鏈接庫,還要修改頭文件,使其能正確引用該庫文件中的函數(shù)。(702)修改步驟(6)合并得到的第二個軟件工程的配置文件,遍歷“SOURCE =”行 后面的文件名,查詢它們是否都還存在,如果不存在,就刪除已分割出去文件的文件名所對 應的行。如果待分割的軟件工程為GCC或G++軟件工程,則執(zhí)行下述操作步驟(711)重寫步驟(6)合并得到的第二個軟件工程的makefile,刪除已經(jīng)分割出去 文件的文件名所對應的行(即源文件的編譯和鏈接);如果步驟(6)生成的為靜態(tài)鏈接庫,則在主函數(shù)main()生成可執(zhí)行文件時,加上 擴展名為a的靜態(tài)鏈接庫文件*. a,即加入cc-o main. ο*, a命令,即可實現(xiàn)將靜態(tài)鏈接庫編 譯到對應的可執(zhí)行文件中,執(zhí)行對應的可執(zhí)行文件,從而實現(xiàn)其原來的功能;只是將原先的 部分函數(shù)做成了庫文件。如果步驟(6)生成的為動態(tài)鏈接庫,則如圖4所示,先在頭文件中包含用于動態(tài)鏈 接庫管理的系統(tǒng)頭文件dlfcn. h ;在對主函數(shù)的源代碼中的變量進行定義后,就用dlopen函數(shù)打開動態(tài)鏈接庫,在 需要調(diào)用動態(tài)鏈接庫中的函數(shù)時,用dlsym函數(shù)取得所要調(diào)用函數(shù)的動態(tài)地址,在主函數(shù) 結(jié)束前,用dlclose函數(shù)關(guān)閉dp該動態(tài)鏈接庫的指針。(8)對步驟(6)合并得到的第二個軟件工程進行編譯,生成新的可執(zhí)行文件。根據(jù) 不同的編譯器,該步驟(8)包括下述兩種不同的操作步驟如果待分割的軟件工程為VC軟件工程,則采用編譯命令為msdev^ PROJECTB% . dsp/MAKE" all-Win32Release〃,生成新的可執(zhí)行文件;如果待分割的軟件工程為GCC或G++軟件工程,則采用編譯命令為make,生成新的 可執(zhí)行文件,且保持原來的功能不變。本發(fā)明已經(jīng)進行了實施試驗,試驗的結(jié)果是成功的,實現(xiàn)了發(fā)明目的。
      權(quán)利要求
      一種軟件工程源代碼的分割方法,其特征在于該方法是將一個軟件工程的源代碼進行分割后,產(chǎn)生兩個新的軟件工程第一個是從該軟件工程中提取出來部分可重用的源代碼所生成的鏈接庫文件,以供重用在其他軟件工程而節(jié)約軟件開發(fā)成本;第二個是將該軟件工程分割后的剩余源代碼與所述新生成的鏈接庫文件合并得到的軟件工程,第二個軟件工程經(jīng)過編譯生成的可執(zhí)行文件的功能與分割前的該軟件工程的功能相同,但是第二個軟件工程中的部分關(guān)鍵代碼轉(zhuǎn)化為鏈接庫,實現(xiàn)了隱藏和保護源代碼的目的。
      2.根據(jù)權(quán)利要求1所述的方法,其特征在于所述方法適用于使用C或C++程序語言 編寫的代碼,該方法所支持的編譯環(huán)境包括Iinux操作系統(tǒng)下的GNU(GNU' s Not Unix)的 C編譯器GCC (GNU C Compiler)和GNU的C++編譯器G++,以及微軟公司的windows操作系 統(tǒng)下的VC編譯器(Microsoft Visual C++);所述GNU是一個自由軟件的計劃工程,代表一 種開源的軟件開發(fā)精神。
      3.根據(jù)權(quán)利要求1所述的方法,其特征在于所述方法包括下列操作步驟(1)先分析用戶指定的待分割軟件工程是否為C或C++語言所編寫,以及該待分割軟件 工程所適用的編譯環(huán)境是否為該方法所支持;如果不是,則提示用戶重新指定軟件工程,或 者結(jié)束該流程;如果是,則順序執(zhí)行步驟(2);(2)分析該待分割軟件工程的語法,提取每個源文件中的類和函數(shù),以供用戶選擇準備 分割出去的軟件工程的源文件;再對該源文件進行實時動態(tài)分析,使之滿足編譯依賴性,再 由用戶指定分割出去的軟件工程類型為動態(tài)鏈接庫或靜態(tài)鏈接庫;所述編譯依賴性是一個 源文件的編譯要依賴于其他源文件的特性;(3)開始分割先選中要分割出來的目標源文件,找到其所在的路徑及其依賴的頭文 件;再將其從所在文件夾內(nèi)刪除,并移至新建的鏈接庫軟件工程內(nèi);(4)完成編譯前的檢測對該鏈接庫軟件工程進行完整性分析,如遇到缺失的全局變 量、宏或資源文件,或者該鏈接庫軟件工程內(nèi)需要用到所述待分割軟件工程中的其他鏈接 庫文件時,都從該待分割軟件工程中拷貝之;(5)生成該鏈接庫軟件工程的配置文件和修改頭文件,使該鏈接庫軟件工程成為分割 后的第一個軟件工程,且其中定義的函數(shù)和類能夠被外部其他軟件工程調(diào)用;(6)對該鏈接庫軟件工程進行編譯,將頭文件和編譯生成的庫文件一并拷貝到所述待 分割軟件工程被分割后的剩余源代碼中;(7)對步驟(6)合并得到的第二個軟件工程中的源文件進行修改,使其能夠找到步驟 (4)所生成的鏈接庫文件;(8)對步驟(6)合并得到的第二個軟件工程進行編譯,生成新的可執(zhí)行文件。
      4.根據(jù)權(quán)利要求2或3所述的方法,其特征在于根據(jù)不同的編譯器,所述步驟(5)進 一步包括下述兩種不同的操作方法如果待分割的軟件工程為VC軟件工程,則執(zhí)行下述操作步驟(501)生成配置文件從所述待分割的軟件工程拷貝擴展名為.dsw的工作區(qū)文件至鏈 接庫軟件工程,再根據(jù)用戶選擇的類型,將相應的擴展名為.dsp的庫文件配置模板拷貝到 該鏈接庫軟件工程的目錄中;再將擴展名為.dsw和.dsp文件重命名為用戶指定的軟件工 程名,搜索并替換擴展名為.dsp文件中所有軟件工程名為用戶指定的軟件工程名;依照模 板的格式將軟件工程中所有源文件、頭文件和資源文件全部寫入到該擴展名為dsp的配置文件中;(502)修改頭文件修改鏈接庫軟件工程中的頭文件,使定義的函數(shù)和類變?yōu)榭奢敵觯?其具體操作內(nèi)容為若用戶選擇的軟件工程類型為靜態(tài)鏈接庫LIB,則將所有類聲明和函 數(shù)聲明都包含在關(guān)鍵詞exterm “C”的括號內(nèi);若用戶選擇的軟件工程類型為動態(tài)鏈接庫 DLL,則在頭文件中使用函數(shù)調(diào)用規(guī)范declspec引出輸出函數(shù),并包含在關(guān)鍵詞extern”C” 括號內(nèi),或者生成相應的DEF文件;或如果待分割的軟件工程為GCC或G++軟件工程,則執(zhí)行下述操作步驟(511)在鏈接庫軟件工程內(nèi)生成配置文件makefile,如果用戶選擇生成靜態(tài)鏈接庫, 關(guān)鍵操作是將目標源文件中的函數(shù)生成靜態(tài)鏈接庫文件*. a;如果用戶選擇生成動態(tài)鏈接 庫,則要用-shared編譯選項,以生成動態(tài)鏈接庫*. so ;(512)如果用戶選擇生成動態(tài)鏈接庫,還要修改頭文件,若原來的函數(shù)聲明為返回值 類型函數(shù)名(參數(shù));則先改為返回值類型(*函數(shù)名)(參數(shù))的形式。
      5.根據(jù)權(quán)利要求3所述的方法,其特征在于根據(jù)不同的編譯器,所述步驟(6)進一步 包括下述兩種不同的操作步驟如果待分割的軟件工程為VC軟件工程,則執(zhí)行下述操作步驟(601)找到VC的安裝目錄%VCDIR %后,先執(zhí)行VC安裝目錄中的批處理文件 VCVARS32. BAT,設置VC環(huán)境變量;然后轉(zhuǎn)到該鏈接庫軟件工程的目錄下執(zhí)行編譯命令 msdev % PROJECTBdsp 或 MAKE" all-ffin32 Release";(602)完成編譯后,將生成的庫文件和所有修改后的頭文件都復制到分割后的第一個 軟件工程、即該鏈接庫軟件工程中;如果為靜態(tài)鏈接庫,則生成擴展名為.lib的文件,如果 為動態(tài)鏈接庫,則分別生成擴展名為.dll的文件和.Lib的文件;為方便調(diào)用,將擴展名為 lib的文件也一同復制到該鏈接庫軟件工程中;或如果待分割的軟件工程為GCC或G++軟件工程,則執(zhí)行下述操作步驟(611)對鏈接庫軟件工程進行編譯,生成庫文件;如果為靜態(tài)鏈接庫,就將生成擴展名 為a的庫文件*. a復制至該鏈接庫軟件工程,如果為動態(tài)鏈接庫,則將生成擴展名為so的 庫文件*. so復制至Iinux系統(tǒng)的庫文件目錄/lib下,再將頭文件拷貝回該鏈接庫軟件軟 件工程目錄。
      6.根據(jù)權(quán)利要求3所述的方法,其特征在于根據(jù)不同的編譯器,所述步驟(7)進一步 包括下述兩種不同的操作步驟如果待分割的軟件工程為VC軟件工程,則執(zhí)行下述操作步驟(701)用progmacomment加載所生成的擴展名為LIB的庫文件,如果步驟(5)所生成 的為動態(tài)鏈接庫,還要修改頭文件,使其能正確引用該庫文件中的函數(shù);(702)修改步驟(6)合并得到的第二個軟件工程的配置文件,遍歷“SOURCE=”行后面 的文件名,查詢它們是否都還存在,如果不存在,就刪除已分割出去文件的文件名所對應的 行;或 如果待分割的軟件工程為GCC或G++軟件工程,則執(zhí)行下述操作步驟(711)重寫步驟(6)合并得到的第二個軟件工程的makefile,刪除已經(jīng)分割出去文件 的的文件名所對應的行;如果步驟(6)生成的為靜態(tài)鏈接庫,則在主函數(shù)main ()生成可執(zhí)行文件時,加上擴展名為a的靜態(tài)鏈接庫文件*. a,即加入cc-o main. ο*, a命令,即可實現(xiàn)將靜態(tài)鏈接庫編譯到 對應的可執(zhí)行文件中,執(zhí)行對應的可執(zhí)行文件,從而實現(xiàn)其原來的功能;只是將原先的部分 函數(shù)做成了庫文件;如果步驟(6)生成的為動態(tài)鏈接庫,則先在頭文件中包含用于動態(tài)鏈接庫管理的系統(tǒng) 頭文件dlfcn.h,在程序調(diào)用到動態(tài)鏈接庫里的函數(shù)時,先取得所要調(diào)用函數(shù)的動態(tài)地址; 在主函數(shù)結(jié)束前,關(guān)閉該動態(tài)鏈接庫的指針。
      7.根據(jù)權(quán)利要求3所述的方法,其特征在于根據(jù)不同的編譯器,所述步驟(8)進一步 包括下述兩種不同的操作步驟如果待分割的軟件工程為VC軟件工程,則采用編譯命令為msdev% PROJECTB% . dsp/ MAKE" aU-ffin32 Release",生成新的可執(zhí)行文件;或如果待分割的軟件工程為GCC或G++軟件工程,則采用編譯命令為make,生成新的可執(zhí) 行文件,且保持原來的功能不變。
      全文摘要
      一種軟件工程源代碼的分割方法,是將一個軟件工程的源代碼進行分割后,產(chǎn)生兩個新的軟件工程第一個是從該軟件工程中提取出來部分可重用的源代碼所生成的鏈接庫文件,以供重用在其他軟件工程而節(jié)約軟件開發(fā)成本;第二個是將該軟件工程分割后的剩余源代碼與生成的鏈接庫文件合并得到的新的軟件工程;第二個軟件工程經(jīng)過編譯生成的可執(zhí)行文件功能與分割前的該軟件工程功能相同,但是將第二個軟件工程中的部分關(guān)鍵代碼轉(zhuǎn)化為鏈接庫,實現(xiàn)了隱藏和保護源代碼的目的。該方法操作步驟簡單、容易,能夠快速地將一個軟件工程分割為可執(zhí)行文件、靜態(tài)鏈接庫或動態(tài)鏈接庫,既為軟件復用創(chuàng)造條件,又將關(guān)鍵代碼替換為鏈接庫,為源代碼的保護和隱藏作出貢獻。
      文檔編號G06F9/45GK101826014SQ20101015400
      公開日2010年9月8日 申請日期2010年4月20日 優(yōu)先權(quán)日2010年4月20日
      發(fā)明者張淼, 徐國愛, 曹斌, 李洋 申請人:北京郵電大學
      網(wǎng)友詢問留言 已有0條留言
      • 還沒有人留言評論。精彩留言會獲得點贊!
      1