• 
    

    
    

      99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看 ?

      從Windows到Linux的C程序移植研究

      2018-07-10 11:19:20夏永紅匡華星
      雷達(dá)與對(duì)抗 2018年2期
      關(guān)鍵詞:數(shù)據(jù)類型功能模塊程序

      蔣 躍,田 田,夏永紅,匡華星

      (中國(guó)船舶重工集團(tuán)公司第七二四研究所,南京 211153)

      0 引 言

      當(dāng)前,作為艦艇平臺(tái)發(fā)展的革命性技術(shù)之一的“高性能公共計(jì)算環(huán)境”已經(jīng)得到了越來越多的關(guān)注。作為下一代艦船的信息整合與處理中心,通過“高性能公共計(jì)算環(huán)境”可以對(duì)平臺(tái)內(nèi)的所有資源(包括射頻資源、面陣資源、信息處理資源等)進(jìn)行統(tǒng)一任務(wù)調(diào)度和聯(lián)合資源分配,以充分發(fā)揮系統(tǒng)整體資源優(yōu)勢(shì)。

      由于具有高效性、穩(wěn)定性、安全性等特點(diǎn)[1],Linux系統(tǒng)更適合于作為“高性能公共計(jì)算環(huán)境”的操作系統(tǒng)。美國(guó)的DDG-1000全艦計(jì)算環(huán)境就采用了刀片服務(wù)器架構(gòu),操作系統(tǒng)為Red Hat Linux。國(guó)內(nèi)的中標(biāo)麒麟桌面操作系統(tǒng)采用強(qiáng)化的Linux內(nèi)核,實(shí)現(xiàn)對(duì)X86及國(guó)產(chǎn)CPU平臺(tái)的全面兼容?;谏鲜鲈?,開展了基于Linux操作系統(tǒng)開發(fā)環(huán)境的雷達(dá)全流程仿真軟件開發(fā)和仿真試驗(yàn),為雷達(dá)信息處理應(yīng)用在Linux操作系統(tǒng)上的開發(fā)實(shí)現(xiàn)積累經(jīng)驗(yàn)。本文針對(duì)從Windows到Linux的C程序移植,介紹了Linux系統(tǒng)的安裝和開發(fā)環(huán)境的搭建,并探討了C程序移植的方法和經(jīng)驗(yàn)。

      1 Linux系統(tǒng)安裝和開發(fā)環(huán)境搭建

      1.1 Linux系統(tǒng)安裝

      在現(xiàn)有的Windows系統(tǒng)下安裝Linux系統(tǒng)有兩種方式可以選擇:一是一般安裝,即分配單獨(dú)的硬盤分區(qū)用來安裝Linux系統(tǒng);二是虛擬機(jī)安裝,即使用軟件模擬一個(gè)具有完整硬件系統(tǒng)功能的計(jì)算機(jī)并安裝Linux系統(tǒng)。一般安裝可以實(shí)現(xiàn)計(jì)算機(jī)的雙系統(tǒng),但在使用時(shí)只能選擇進(jìn)入一種操作系統(tǒng)。而虛擬機(jī)安裝則能保證新系統(tǒng)在一個(gè)完全隔離的環(huán)境中工作,虛擬機(jī)中安裝和運(yùn)行的應(yīng)用程序就像在真正的計(jì)算機(jī)上一樣。[2]同時(shí),對(duì)于Windows用戶來說,虛擬機(jī)只是物理計(jì)算機(jī)上的應(yīng)用程序,即使虛擬機(jī)中安裝的系統(tǒng)發(fā)生崩潰也不會(huì)影響物理計(jì)算機(jī)上的Windows系統(tǒng)。更重要的是,虛擬機(jī)安裝可以實(shí)現(xiàn)Windows系統(tǒng)與Linux系統(tǒng)下資源的拷貝共享,有需要的話完全可以在物理計(jì)算機(jī)上模擬多臺(tái)虛擬的計(jì)算機(jī),并且安裝好的虛擬機(jī)也可以拷貝到其他物理計(jì)算機(jī)上使用。因此,本文選擇使用虛擬機(jī)在現(xiàn)有Windows系統(tǒng)下安裝Linux操作系統(tǒng)。

      在當(dāng)前的主流虛擬機(jī)軟件中,VMware在多操作系統(tǒng)支持和執(zhí)行效率上都具有比較明顯的優(yōu)勢(shì),因此本文選擇VMware軟件來創(chuàng)建虛擬機(jī)。本文所使用的虛擬機(jī)安裝了CentOS 7版本的Linux操作系統(tǒng)。安裝完成后在Windows系統(tǒng)下只需要打開VMware軟件,啟動(dòng)虛擬機(jī)即可登錄CentOS 7,實(shí)現(xiàn)Windows與Linux系統(tǒng)的同時(shí)工作。在VMware軟件中還自帶了一種增強(qiáng)工具VMware Tools,可以實(shí)現(xiàn)物理計(jì)算機(jī)(Windows)和虛擬機(jī)(Linux)或者兩臺(tái)虛擬機(jī)之間的拷貝功能,方便資源共享和用戶使用。

      1.2 開發(fā)環(huán)境搭建

      Eclipse[3]是一個(gè)開源免費(fèi)的基于Java撰寫的集成開發(fā)環(huán)境(IDE),提供圖形化的編輯和調(diào)試界面,可以跨平臺(tái),在Windows和Linux系統(tǒng)下都可以使用。另外,Eclipse本身是可擴(kuò)展的開發(fā)平臺(tái),通過插件可以實(shí)現(xiàn)目前主流程序語言諸如C/C++、C#、Java、PHP、Python等等的程序開發(fā)。因此,本文選擇在Linux系統(tǒng)下安裝Eclipse來進(jìn)行C/C++的程序開發(fā)。

      Eclipse開發(fā)程序的流程一般為創(chuàng)建工程->創(chuàng)建文件->編輯文件->編譯工程->運(yùn)行或調(diào)試。由于本文是將Windows系統(tǒng)下的C程序移植到Linux系統(tǒng)中,在創(chuàng)建工程后只需將編輯好的各個(gè)工程文件導(dǎo)入即可,再對(duì)工程進(jìn)行編譯、運(yùn)行或調(diào)試。

      2 C程序移植方法

      在將C程序從Windows系統(tǒng)移植到Linux系統(tǒng)的過程中,由于Linux下gcc默認(rèn)的編譯規(guī)則是比VC嚴(yán)格的,在VC中編譯通過的程序放到Linux下卻可能出現(xiàn)許多警告錯(cuò)誤[4]。根據(jù)實(shí)際的C程序移植經(jīng)驗(yàn),在移植過程中需要注意以下幾方面:

      (1) 確保文件名的大小寫正確

      雖然在C/C++語言中是區(qū)分大小寫的,但對(duì)于程序中包含的頭文件,在Windows系統(tǒng)下其文件名大小寫都可以正確編譯,而在Linux系統(tǒng)下卻必須要頭文件的大小寫正確。這是由于ext2文件系統(tǒng)對(duì)文件名的大小寫敏感,避免在編譯中出現(xiàn)找不到頭文件的錯(cuò)誤。

      (2) 注意各個(gè)系統(tǒng)下獨(dú)有的頭文件

      在Windows系統(tǒng)下,程序中通常會(huì)包含頭文件“windows.h”,若程序需要實(shí)現(xiàn)網(wǎng)絡(luò)通信,則需包含頭文件“winsock2.h”或者M(jìn)FC下的“afxsock.h”。這些頭文件都是Windows系統(tǒng)獨(dú)有的。因此,程序在移植到Linux系統(tǒng)后,需要將這類頭文件以及一些Windows系統(tǒng)的常量定義說明注釋掉,并且添加Linux系統(tǒng)下對(duì)應(yīng)的頭文件,例如頭文件“sys/socket.h”即可支持實(shí)現(xiàn)網(wǎng)絡(luò)通信。

      (3) 注意VC中獨(dú)有的數(shù)據(jù)類型和關(guān)鍵字

      VC中__int16、__int32、__int64等獨(dú)有的數(shù)據(jù)類型在Linux系統(tǒng)中編譯器并不支持,無法正確識(shí)別這些數(shù)據(jù)類型。因此,在程序移植后可以將這些數(shù)據(jù)類型在VC中的定義語句復(fù)制到一個(gè)頭文件中,并在程序中包含該頭文件。而對(duì)于VC中獨(dú)有的關(guān)鍵字如WORD、DWORD、__asm等等,應(yīng)盡量避免在程序中使用,或者在移植后用“#ifdef”和“#endif”重新編寫。因此,為提高程序在不同平臺(tái)之間的可移植性,在程序編寫過程中應(yīng)該避免直接使用各編譯器獨(dú)有的數(shù)據(jù)類型或關(guān)鍵字。

      (4) 注意修改相應(yīng)函數(shù)原型

      對(duì)于程序中使用標(biāo)準(zhǔn)C/C++語言編寫的函數(shù),在不同系統(tǒng)下基本都可以適用。但是,對(duì)于一些系統(tǒng)調(diào)用函數(shù),由于Linux與Windows有所區(qū)別,需要改變相應(yīng)的函數(shù)原型。例如,要實(shí)現(xiàn)網(wǎng)絡(luò)通信功能,在Windows中使用MFC下CSocket編程,調(diào)用CSocket::Create初始化、CSocket::Bind綁定地址端口、CSocket::SendTo發(fā)送內(nèi)容、CSocket::Close關(guān)閉等等,而在Linux中相應(yīng)地通過socket、bind、sendto、close等函數(shù)實(shí)現(xiàn)這些功能。若要實(shí)現(xiàn)文件指針的移動(dòng),在Linux中用fseeko64函數(shù)代替Windows下的_fseeki64函數(shù)來將文件指針移動(dòng)到指定的位置。在計(jì)算程序運(yùn)行耗時(shí)方面,Windows系統(tǒng)使用QueryPerformanceFrequency和QueryPerformanceCounter函數(shù)來計(jì)時(shí),而Linux系統(tǒng)下則可以用gettimeofday函數(shù)實(shí)現(xiàn)計(jì)時(shí)功能。因此,在程序移植中要實(shí)現(xiàn)相同的功能需要改變相應(yīng)的函數(shù)原型。

      (5) 注意編譯環(huán)境的配置

      在Windows系統(tǒng)中,使用VC編寫的工程需要添加頭文件引用路徑以及庫文件的引用路徑和鏈接。相應(yīng)地,在Linux系統(tǒng)中也要對(duì)Eclipse的編譯環(huán)境進(jìn)行配置。由于在程序中采用了Intel IPP函數(shù)庫進(jìn)行加速計(jì)算,并且在VC中利用IPP的多線程靜態(tài)函數(shù)庫進(jìn)行內(nèi)部并行加速,在程序移植后也需要進(jìn)行修改配置。因此,在Linux系統(tǒng)中需要先安裝相應(yīng)版本的Intel IPP,并且在Eclipse中修改工程屬性,配置IPP的環(huán)境變量、頭文件引用路徑、庫文件引用路徑和鏈接。在配置完編譯環(huán)境可以正確編譯后,還需要在運(yùn)行或調(diào)試配置中也相應(yīng)配置IPP的環(huán)境變量。

      (6) 注意系統(tǒng)文件或路徑

      在Windows與Linux系統(tǒng)中,各自的路徑標(biāo)識(shí)符是不同的,因此程序移植后需將路徑中的“\”改為“/”。另外,由于Linux系統(tǒng)中對(duì)于文件或者目錄的權(quán)限是分為擁有者、群組和其他的,在對(duì)文件進(jìn)行寫操作時(shí)需要注意修改文件或目錄的權(quán)限,否則無法進(jìn)行寫操作。

      以上幾方面僅是實(shí)際C程序移植過程中出現(xiàn)的需要注意的問題。但是,在具體的程序移植過程中可能還會(huì)出現(xiàn)更多更復(fù)雜的情況,例如移植Windows系統(tǒng)下用MFC編寫的圖形界面程序、多進(jìn)/線程程序等等都還需要分析程序設(shè)計(jì)結(jié)構(gòu),理解程序邏輯模塊,才能更好地完成程序移植。

      3 移植結(jié)果分析

      某型雷達(dá)的全流程處理程序原是在Windows系統(tǒng)的VC中實(shí)現(xiàn)的,本文將其移植到Linux系統(tǒng),程序成功編譯并運(yùn)行,輸出結(jié)果與VC程序保持一致,成功完成移植工作。本文所使用的物理計(jì)算機(jī)為Windows系統(tǒng),內(nèi)存為32 GB,處理器為i7-6700K 四核八線程;而創(chuàng)建的虛擬機(jī)為L(zhǎng)inux系統(tǒng),內(nèi)存為4 GB,處理器為雙核。由于全流程處理程序運(yùn)行所需內(nèi)存占比較小,且程序內(nèi)部?jī)H利用雙核進(jìn)行并行加速,處理結(jié)果基本不受兩個(gè)系統(tǒng)環(huán)境的計(jì)算資源影響。下面對(duì)兩個(gè)系統(tǒng)下程序各功能模塊的處理耗時(shí)結(jié)果進(jìn)行對(duì)比分析,對(duì)比結(jié)果如表1所示。

      表1 兩個(gè)系統(tǒng)下程序各功能模塊處理耗時(shí)對(duì)比

      從表1中可以看出,在讀取數(shù)據(jù)上Linux系統(tǒng)耗時(shí)減少了約20 s,查找包頭兩者耗時(shí)差不多,信號(hào)處理部分Linux耗時(shí)減少了約7 s。雖然在點(diǎn)跡凝聚時(shí)Linux耗時(shí)多了近5 s,但在發(fā)送和記錄點(diǎn)跡以及輸出和發(fā)送視頻方面則有了較大提升,耗時(shí)節(jié)省了約33 s。統(tǒng)計(jì)整個(gè)程序所有功能模塊的處理時(shí)間,Linux系統(tǒng)的耗時(shí)比Windows節(jié)約了56 s。這是由于Linux系統(tǒng)簡(jiǎn)單、占用內(nèi)存少,可以利用最少的資源最短的時(shí)間實(shí)現(xiàn)所有功能,而且Linux系統(tǒng)在硬件支持和網(wǎng)絡(luò)性能方面較Windows都占優(yōu)勢(shì)。

      表2給出了信號(hào)處理中各功能模塊的處理耗時(shí)對(duì)比。從中可以發(fā)現(xiàn),兩個(gè)系統(tǒng)下信號(hào)處理的各功能模塊的合計(jì)耗時(shí)與表1中基本相符,且在脈沖壓縮部分Linux的耗時(shí)減少更為明顯。

      表2 兩個(gè)系統(tǒng)下信號(hào)處理各功能模塊處理耗時(shí)對(duì)比

      4 結(jié)束語

      本文針對(duì)從Windows到Linux的C程序移植,介紹了Linux系統(tǒng)的安裝和開發(fā)環(huán)境的搭建,根據(jù)實(shí)際程序移植經(jīng)驗(yàn)給出了C程序移植的方法和需要注意的問題,同時(shí)對(duì)實(shí)際程序各功能模塊的處理耗時(shí)結(jié)果進(jìn)行了對(duì)比分析,程序在Linux系統(tǒng)下耗時(shí)更短。

      猜你喜歡
      數(shù)據(jù)類型功能模塊程序
      詳談Java中的基本數(shù)據(jù)類型與引用數(shù)據(jù)類型
      如何理解數(shù)據(jù)結(jié)構(gòu)中的抽象數(shù)據(jù)類型
      試論我國(guó)未決羈押程序的立法完善
      “程序猿”的生活什么樣
      英國(guó)與歐盟正式啟動(dòng)“離婚”程序程序
      基于ASP.NET標(biāo)準(zhǔn)的采購(gòu)管理系統(tǒng)研究
      輸電線路附著物測(cè)算系統(tǒng)測(cè)算功能模塊的研究
      M市石油裝備公服平臺(tái)網(wǎng)站主要功能模塊設(shè)計(jì)與實(shí)現(xiàn)
      創(chuàng)衛(wèi)暗訪程序有待改進(jìn)
      功能模塊的設(shè)計(jì)與應(yīng)用研究
      客服| 临猗县| 瓦房店市| 潼关县| 巴彦县| 蓝山县| 新蔡县| 同仁县| 三门峡市| 当阳市| 延长县| 五大连池市| 乌海市| 巍山| 呼伦贝尔市| 延安市| 孟州市| 栖霞市| 屏山县| 股票| 法库县| 株洲县| 民权县| 福州市| 内乡县| 宣城市| 博兴县| 黑河市| 肥东县| 长泰县| 老河口市| 金门县| 宣威市| 清水县| 凌云县| 徐州市| 通榆县| 外汇| 南宫市| 甘谷县| 安康市|