跨平臺(tái)軟件的開發(fā)方式.doc_第1頁
跨平臺(tái)軟件的開發(fā)方式.doc_第2頁
跨平臺(tái)軟件的開發(fā)方式.doc_第3頁
跨平臺(tái)軟件的開發(fā)方式.doc_第4頁
跨平臺(tái)軟件的開發(fā)方式.doc_第5頁
已閱讀5頁,還剩7頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

跨平臺(tái)軟件的開發(fā)方式2007年04月15日 星期日 09:48原創(chuàng):smalltalk隨著經(jīng)濟(jì)和技術(shù)的發(fā)展,全球化進(jìn)程的加速,特別是互聯(lián)網(wǎng)的發(fā)展和普及,為軟件提供了一個(gè)世界范圍的運(yùn)行環(huán)境,當(dāng)一個(gè)軟件發(fā)布到Internet上面時(shí),這個(gè)軟件很可能瞬間在全世界就被人使用。從軟件開發(fā)商的角度來看,同時(shí)具有跨平臺(tái)和全球化特性的軟件能夠最大限度的占有市場(chǎng);從自由軟件開發(fā)團(tuán)體和個(gè)人來看,開發(fā)的軟件不但能夠運(yùn)行在多種操作系統(tǒng)下,而且還能夠以不同的語言版本運(yùn)行,全世界用戶都可以使用,這本身就符合自由和開放的追求。由于這些因素,跨平臺(tái)技術(shù)和全球化技術(shù)一直是軟件業(yè)研究和發(fā)展的重要課題。開發(fā)跨平臺(tái)軟件和全球化軟件的最大目的是為了爭(zhēng)取更多的用戶,獲得更大的市場(chǎng)。跨平臺(tái)軟件能夠在多個(gè)不同類型的操作系統(tǒng)下運(yùn)行,它從操作系統(tǒng)層次拓寬軟件的用戶群體;全球化軟件是既具有國際化特性又進(jìn)行了本地化處理的軟件,這樣,世界上不同國家和地區(qū)的用戶都能以自己熟悉的語言和習(xí)慣來使用該軟件。具有跨平臺(tái)特性的全球化軟件是非常有“魅力的”,它能夠吸引到更多的潛在用戶。由于跨平臺(tái)和國際化兩者都是特別廣泛的概念,不同的軟件架構(gòu)、不同的開發(fā)語言,采用的方法各不相同,為了做到不以偏概全,本篇文章將主要針對(duì)那些采用C/C+語言進(jìn)行開發(fā)的、并準(zhǔn)備添加或者已經(jīng)具有跨平臺(tái)特性的、同時(shí)還需要全球化的軟件。文章為開發(fā)者在設(shè)計(jì)和實(shí)現(xiàn)這類軟件時(shí)提供一些指導(dǎo)性意見,給出一些針對(duì)跨平臺(tái)軟件實(shí)施全球化的方法,并提出了一種采用跨平臺(tái)資源文件和模塊配合的解決方案和具體實(shí)現(xiàn)。*什么是跨平臺(tái)軟件跨平臺(tái)軟件技術(shù)在過去的十幾年來逐步發(fā)展,特別是當(dāng)個(gè)人計(jì)算機(jī)(PC & MAC)性能的提高,LINUX操作系統(tǒng)的出現(xiàn),JAVA語言的推出,呈現(xiàn)出跳躍發(fā)展的趨勢(shì)。目前不但很多著名的自由軟件項(xiàng)目提供跨平臺(tái)的自由軟件,而且很多專業(yè)的軟件廠商也將他們的產(chǎn)品向不同的平臺(tái)移植。在發(fā)展的歷程中,跨平臺(tái)軟件技術(shù)也逐步形成規(guī)范,但由于平臺(tái)固有的異質(zhì)性,在進(jìn)行跨平臺(tái)軟件開發(fā)時(shí),往往在軟件的功能、效能與移植性等之間,要做適當(dāng)?shù)臋?quán)衡,比較難整理出一般性的、與平臺(tái)及工具種類無關(guān)的法則。什么是跨平臺(tái)軟件,簡(jiǎn)單講就是至少可以運(yùn)行在兩個(gè)不同操作系統(tǒng)平臺(tái)下的軟件,完成相同或者相似的功能,而且這個(gè)軟件的可執(zhí)行程序來自與一份源代碼。*跨平臺(tái)軟件的開發(fā)方式跨平臺(tái)軟件的開發(fā)方式大體有三種,第一種是先在一個(gè)基準(zhǔn)平臺(tái)上開發(fā)好,然后再移植到其他的操作系統(tǒng);第二種是采用的跨平臺(tái)模塊組合;第三種是采用虛擬機(jī)技術(shù),利用平臺(tái)無關(guān)的語言進(jìn)行開發(fā)。1. 移植第一種開發(fā)方式是比較傳統(tǒng)的做法,也是一直被廣泛采用的方式。這種做法也稱為軟件移植(Porting),即把在一種操作系統(tǒng)下運(yùn)行的軟件通過改寫部分代碼,移植到另外一種或多種操作系統(tǒng)下運(yùn)行。軟件最初的設(shè)計(jì)、編碼以及移植時(shí)使用的工具,這些決定了移植的代價(jià)。如果軟件在最初的設(shè)計(jì)、編碼時(shí)沒有考慮到以后的移植,大量采用了平臺(tái)相關(guān)的技術(shù)和平臺(tái)相關(guān)框架庫進(jìn)行編碼,對(duì)這些代碼移植將付出極高的代價(jià)。一種極端的情況是最初使用的開發(fā)語言不能跨平臺(tái)的,以后要對(duì)這個(gè)軟件進(jìn)行移植,將不得不更換開發(fā)語言重新編寫全部代碼,還要進(jìn)行全新的測(cè)試,這樣的軟件在移植時(shí)是異常困難的。1.1. 宏定義軟件的代碼,從跨平臺(tái)的角度來看,可以分為平臺(tái)相關(guān)的和平臺(tái)無關(guān)的。采用C/C+編寫的軟件,在進(jìn)行移植時(shí),平臺(tái)無關(guān)的的代碼基本上不需要做大的改動(dòng),但平臺(tái)相關(guān)的代碼需要做很大的調(diào)整。這里所說的平臺(tái)包括操作系統(tǒng)和編譯器,為了能夠做到讓編譯器在編譯時(shí)根據(jù)當(dāng)前的平臺(tái)狀況來自動(dòng)選擇需要編譯的代碼,我們一般需要用C/C+的編譯宏指令來實(shí)現(xiàn)。舉個(gè)例子,下面的一段代碼是得到系統(tǒng)當(dāng)前的時(shí)間并且格式化成字符串的操作,注意其中宏指令#ifdef #else#endif的使用。這段代碼可以在Win32、Linux和大多數(shù)Unix平臺(tái)通過編譯:#include ;#include ;#ifdef WIN32#define LOCALTIME_R(t) localtime(t)#define SNPRINTF _snprintf#else#define LOCALTIME_R(t) localtime_r(t), (struct tm *)&tmres)#define SNPRINTF snprintf#endifchar * getcurrentdate(char *buffer, unsigned int buflen) if (buffer) struct tm *tmnow; time_t long_time; time(&long_time ); /* Get time as long integer. */ tmNow = LOCALTIME_R( &long_time ); /* Convert to local time. */ SNPRINTF(buffer, buflen, %.4d-%.2d-%.2d %.2d:%.2d:%.2d, tmnow -;tm_year+1900, tmnow -;tm_mon + 1, tmnow -;tm_mday, tmnow -;tm_hour, tmnow -;tm_min, tmnow -;tm_sec); return buffer;研究一下上面的代碼我們可以發(fā)現(xiàn),由于一些庫函數(shù)是非ANSI標(biāo)準(zhǔn)的,平臺(tái)間有些差異,比如獲得格式化字符串的函數(shù)在Win32平臺(tái)叫_snprintf,而在Unix/Linux平臺(tái)叫snprintf,它們之間的差別不是太大,通過使用編譯宏指令就可以區(qū)分。1.2. 編譯環(huán)境識(shí)別在C/C+編譯器編譯源碼時(shí),為了能夠識(shí)別當(dāng)前環(huán)境的狀況,這包括編譯器的類型和版本,操作系統(tǒng)的類型和版本,計(jì)算機(jī)CPU的類型,機(jī)器內(nèi)部的字節(jié)順序等,每種編譯器內(nèi)部一般規(guī)定了一些常用的宏定義,利用這些定義就可以區(qū)分出當(dāng)前的編譯環(huán)境了。如果我們開發(fā)的軟件需要在很多不同的平臺(tái)很編譯器上編譯,這時(shí)候環(huán)境就比較復(fù)雜了,這個(gè)時(shí)候如果我們能夠?qū)⒕幾g環(huán)境的宏定義轉(zhuǎn)換成我們自己內(nèi)部的約定,然后全部使用內(nèi)部的約定來處理宏,這會(huì)簡(jiǎn)化我們進(jìn)行跨平臺(tái)移植的操作。舉例來說,下面的一段代碼可以區(qū)分目前多種常用的編譯環(huán)境:#ifndef _ENV_MACROS_H_#define _ENV_MACROS_H_/* _ENV_I386 Intel i386/i486/Pentium (little endian)* _ENV_ALPHA Compaq/Digital Alpha (little endian)* _ENV_SPARC Sun Sparc* _ENV_HPPA HP PA-RISC* _ENV_MIPS MIPS* _ENV_PPC PowerPC* _ENV_POWER POWER Processors.* _ENV_MSVCPP Microsoft Visual C+ compiler; version* _ENV_WIN 32 or 64 bit Windows* _ENV_WINNT Windows NT* _ENV_WIN32 32 bit Windows* _ENV_WIN64 64 bit Windows* _ENV_UNIX UNIX* _ENV_SOLARIS SUN Solaris* _ENV_LINUX Linux* _ENV_HPUX HP UNIX* _ENV_AOSF Digital UNIX/Tru64 UNIX* _ENV_AIX IBM AIX* _ENV_IRIX SGI IRIX* _ENV_OS390 IBM OS/390* _ENV_AS400 IBM OS/400, AS/400* _ENV_MACOS Macintosh* _ENV_GNUC GNU C/C+ compiler; major version* _ENV_HP_ACC HP aC+ compiler; version* _ENV_SUNPRO Sun Pro/Workshop/Forte compiler; version (_ENV_SUNPRO_CC)* _ENV_SUNPRO_CC Sun Pro/Workshop/Forte CC compiler; version* _ENV_SUNPRO_C Sun Pro/Workshop/Forte C compiler; version* _ENV_SUN_SPARC Sun Sparc compilation mode* _ENV_SUN_SPARC32 Sun Sparc 32-bit compilation mode* _ENV_SUN_SPARC64 Sun Sparc 64-bit compilation mode* _ENV_SUN_I386 Sun i386 compilation mode* _ENV_AOSF_CC Compaq C+ compiler for Tru64; version* _ENV_INT64_NATIVE Compiler provides a 64-bit integer (not supported yet)* _ENV_64BIT_NATIVE defined for 64 bit platforms (not supported yet)* _ENV_CSET IBM AIX xlC, xlc, etc. this may be in old version.* _ENV_IBMC IBM AIX c compiler,xlc, cc.* _ENV_IBMCPP IBM AIX cpp compiler, xlC.* _ENV_MVSCPP IBM OS390 c+, cxx.* _ENV_MIPSPRO_CC SGI IRIX C* _ENV_BIG_ENDIAN_ARCH Defined if big-endian architecture* _ENV_LITTLE_ENDIAN_ARCH Defined if little-endian architecture* _ENV_SYSCALL _stdcall on Windows* _ENV_DECLSPEC_DLLEXPORT _declspec(dllexport) for VC+; empty otherwise* _ENV_DECLSPEC_DLLIMPORT _declspec(dllimport) for VC+; empty otherwise*/*/* Operating system / platform */*/* Windows platforms */#if (defined(WIN32) | defined(_WIN32) | defined(WIN64) | defined(_WIN64) | defined(_WIN32_)#define _ENV_WIN#if (defined(WIN32) | defined(_WIN32) | defined(_WIN32_)#define _ENV_WIN32#elif (defined(WIN64) | defined(_WIN64)#define _ENV_WIN64#endif#ifdef _WIN32_WINNT#define _ENV_WINNT#endif/* Alpha OSF / Tru64 / Digital UNIX */#elif (defined(_osf_)#define _ENV_AOSF#define _ENV_UNIX/* SUN Solaris - assumed */#elif (defined(_sun)#define _ENV_SOLARIS#define _ENV_UNIX/* IBM AIX */#elif (defined(_AIX)#define _ENV_AIX#define _ENV_UNIX /* AIX4.2 supports UNIX95, AIX4.3 supports UNIX98 */* SGI IRIX */#elif (defined(IRIX)#define _ENV_IRIX#define _ENV_UNIX/* IBM OS390 */#elif (defined(_MVS_)#define _ENV_OS390#define _ENV_UNIX /* OS/390 V2R2 UNIX95, OS/390 V2R7 UNIX98 */#elif (defined(EXM_OS390)#define _ENV_OS390#define _ENV_UNIX/* IBM AS400 */#elif (defined(_OS400_)#define _ENV_AS400#define _ENV_UNIX/* Macintosh */#elif (defined(macintosh)#define _ENV_MACOS/* Linux */#elif (defined(_linux_)#define _ENV_LINUX#define _ENV_UNIX/* HP Unix */#elif (defined(_hpux)#define _ENV_HPUX#define _ENV_UNIX/* Else */#else#warning Unknown platform!#endif/*/* Compiler */*/#if (defined(_MSC_VER) /* Microsoft Visual C+ */#define _ENV_MSVCPP _MSC_VER#elif defined(_BORLANDC_)#define _ENV_BORC /* Borland C/C+ */#elif defined(_WATCOMC_)#define _ENV_WATCOMC /* watcom c/c+ */#elif (defined(_GNUC_) /* GNU Project */#define _ENV_GNUC _GNUC_#elif (defined(_SUNPRO_CC) | defined(_SUNPRO_C) /* SUN Pro/Workshop/Forte */#define _ENV_SUNPRO _SUNPRO_CC#ifdef _SUNPRO_CC#define _ENV_SUNPRO_CC _SUNPRO_CC#endif#ifdef _SUNPRO_C#define _ENV_SUNPRO_C _SUNPRO_C#endif#elif (defined(_HP_aCC) /* HP aCC */#define _ENV_HP_ACC _HP_aCC#elif (defined(_xlC_) /* IBM C SET */#define _ENV_CSET _xlC_#elif (defined(_IBMC_) /* IBM c compiler */#define _ENV_IBMC _IBMC_#elif (defined(_IBMCPP_) /* IBM c+ compiler */#define _ENV_IBMCPP _IBMCPP_#elif (defined(_ENV_IRIX) | defined(_sgi)#define _ENV_MPISPRO_CC#elif (defined(_MVS_) & defined(_cplusplus) /* OS390 c+ compiler */#define _ENV_MVSCPP#elif (defined(EXM_OS390) & defined(_cplusplus) /* OS390 c+ compiler */#define _ENV_MVSCPP#elif (defined(_OS400_)#elif (defined(_DECCXX_VER) /* Compaq C+ */#define _ENV_AOSF_CC _DECCXX_VER#else#warning Unknown compiler!#endif/*/* Processor architecture */*/#if (defined(_ENV_MSVCPP)#ifdef _M_IX86 /* i386 architecture */#define _ENV_I386#endif#ifdef _M_ALPHA /* Alpha architecture */#define _ENV_ALPHA#endif#elif (defined(_ENV_SUNPRO)#ifdef _sparc /* Sparc architecture - 32-bit compilation mode */#define _ENV_SPARC#define _ENV_SUN_SPARC#define _ENV_SUN_SPARC32#endif#ifdef _sparcv9 /* Sparc architecture - 64-bit compilation mode */#define _ENV_SPARC#define _ENV_SUN_SPARC#define _ENV_SUN_SPARC64#endif#ifdef _i386 /* I386 architecture */#define _ENV_I386#define _ENV_SUN_I386#endif#elif (defined(_ENV_AOSF_CC)#ifdef _alpha /* Alpha architecture */#define _ENV_ALPHA#endif#elif (defined(_ENV_GNUC)#if (defined(_alpha) | defined(_alpha_)#define _ENV_ALPHA#elif (defined(_i386_)#define _ENV_I386#elif (defined(_sparc)#define _ENV_SUN_SPARC32#elif (defined(_hppa_)#define _ENV_HPPA#elif (defined(_mips_)#define _ENV_MIPS#elif (defined(_PPC_)#define _ENV_PPC#else#warning Unknown processor architecture!#endif#elif (defined(_ENV_HP_ACC)#if defined(_hppa)#define _ENV_HPPA#endif#elif (defined(_mips) | defined(_mips_) | defined(_MIPS_)#define _ENV_MIPS#elif (defined(_ENV_AIX)#if defined(_POWER)#define _ENV_POWER#endif#elif (defined(_ENV_MACOS)#define _ENV_PPC#elif (defined(_ENV_OS390)|defined(_ENV_AS400)#define _ENV_POWER#else#warning Unknown processor architecture!#endif/*/* Endian-ness */*/#if (defined(_ENV_I386) | defined(_ENV_ALPHA)#ifndef _ENV_LITTLE_ENDIAN_ARCH#define _ENV_LITTLE_ENDIAN_ARCH#endif /* _ENV_LITTLE_ENDIAN_ARCH */#ifdef _ENV_BIG_ENDIAN_ARCH#undef _ENV_BIG_ENDIAN_ARCH#endif /* _ENV_BIG_ENDIAN_ARCH */#else /* Sparc, etc. */#ifndef _ENV_BIG_ENDIAN_ARCH#define _ENV_BIG_ENDIAN_ARCH#endif /* _ENV_BIG_ENDIAN_ARCH */#ifdef _ENV_LITTLE_ENDIAN_ARCH#undef _ENV_LITTLE_ENDIAN_ARCH#endif /* _ENV_LITTLE_ENDIAN_ARCH */#endif /* Little-endian architectures */* TBD: How the hell do I detect endian-ness of HPPA machines, or is it transparent to the program? */*/* Miscellaneous macros */*/#if (defined(_ENV_MSVCPP)#define _ENV_DECLSPEC_DLLEXPORT _declspec(dllexport)#define _ENV_DECLSPEC_DLLIMPORT _declspec(dllimport)#define _ENV_SYSCALL _stdcall#define _ENV_DECLSPEC_DLLEXPORT_MID#elif defined(_ENV_OS390)#define _ENV_DECLSPEC_DLLEXPORT #define _ENV_DECLSPEC_DLLIMPORT #define _ENV_SYSCALL #define _ENV_DECLSPEC_DLLEXPORT_MID _Export#else /* not _ENV_MSVCPP */#define _ENV_DECLSPEC_DLLEXPORT#define _ENV_DECLSPEC_DLLIMPORT#define _ENV_SYSCALL#define _ENV_DECLSPEC_DLLEXPORT_MID#endif /* _ENV_MSVCPP */#endif /* _ENV_MACROS_H_ */以上的代碼將原來編譯器各自的環(huán)境宏轉(zhuǎn)換成統(tǒng)一的以_ENV_開始的宏定義,可以區(qū)分當(dāng)前編譯器的類型、操作系統(tǒng)類型、系統(tǒng)內(nèi)部字節(jié)順序和計(jì)算機(jī)CPU類型等信息。有了這些信息,可以在移植代碼和跨平臺(tái)編碼時(shí)方便地使用平臺(tái)相關(guān)的特性。1.3. 定義通用的數(shù)據(jù)類型在目前的大多數(shù)計(jì)算機(jī)系統(tǒng)中,基本的數(shù)據(jù)類型在字節(jié)長(zhǎng)度上基本一致,比如int類型占4個(gè)字節(jié),char類型占1個(gè)字節(jié)等,但有些基本的數(shù)據(jù)類型還是有差別的,比如float、double和64位的整數(shù)類型,不同的平臺(tái)還是有些差別的,為了方便進(jìn)行跨平臺(tái)的編程,定義一個(gè)通用的數(shù)據(jù)類型可以簡(jiǎn)化花費(fèi)在數(shù)據(jù)類型上的時(shí)間。1.4. 利用平臺(tái)交叉工具移植隨著個(gè)人計(jì)算機(jī)性能的提高,目前比較先進(jìn)的PC處理能力已經(jīng)不比采用Unix操作系統(tǒng)平臺(tái)的工作站差,蘋果機(jī)(Mac)的速度也在成倍增長(zhǎng),最快Power Mac G5系列已經(jīng)的采用了主頻在2GHz以上的RISC 處理器。在這樣的情況下,將原來在Unix平臺(tái)上運(yùn)行的軟件下移到PC和Mac已經(jīng)成為可能,這可以大大降低該軟件的硬件平臺(tái)的投資;同樣,將PC或Mac上軟件上移到Unix平臺(tái),可以充分發(fā)揮Unix平臺(tái)的處理能力,更加有效地利用Unix平臺(tái),這同樣也重要意義。在這樣的背景下,有一些專業(yè)研究跨平臺(tái)開發(fā)技術(shù)的公司和社會(huì)團(tuán)體針對(duì)特定的應(yīng)用推出了各種軟件移植的解決方案,運(yùn)用這些工具可以大大減少移植的代價(jià)。1.4.1. 從Unix/Linux到WindowsCygwin是Cygwin公司(/)的產(chǎn)品,它提供了Windows操作系統(tǒng)下的一個(gè)UNIX環(huán)境,它可以幫助程序開發(fā)人員把應(yīng)用程序從UNIX/Linux移植到Windows平臺(tái),是一個(gè)功能強(qiáng)大的工具集。 Cygwin由仿真層和一組工具組成,cygwin1.dll:它作為UNIX的一個(gè)仿真層,提供UNIX API功能; Cygwin工具負(fù)責(zé)創(chuàng)建一個(gè)UNIX或Linux的外觀界面。 Cygwin可以在Windows CE以外,Windows 95以上的所有非beta版本的Windows OS下工作,如Windows 98、Windows 2000、Windows XP等。 在Cygwin提供的仿真環(huán)境下,提供經(jīng)過移植的Gcc編譯器,很多原來在Unix/Linux上用Gcc編譯的軟件可以不加修改地在Windows下編譯并運(yùn)行,這極大地方便了軟件從Unix到Window的移植,特別是一些開發(fā)原碼的項(xiàng)目。NuTCRACKER是MKS公司(/)的產(chǎn)品,它為開發(fā)人員在Windows下提供了一個(gè)Unix的環(huán)境,用戶可以方便地將Unix/Linux上使用X server、多線程程序移植到Windows平臺(tái)下運(yùn)行。img/forum/uploadfile/untitled_71551072874798.jpg/img MKS Toolkit企業(yè)開發(fā)版可以不僅可以開發(fā)、移植和部署非圖形化的Unix應(yīng)用程序和腳本程序,而且還可以移植原來使用X Windows, OpenGL。在安裝好NuTCRACKER平臺(tái)后,用戶甚至可以直接使用Visual C+集成環(huán)境來編譯來自Unix/Linux上的代碼。直接將Unix上的代碼拿到Windows下編譯執(zhí)行,這大大地節(jié)省了移植的成本。1.4.2. 從Windows到Unix/LinuxWind/U是bristol公司(/)開發(fā)的產(chǎn)品,它提供了一種將Win32程序順利地移植到Unix和Linux操作系統(tǒng)方法。它在Unix和Linux系統(tǒng)上實(shí)現(xiàn)了Win32的API以及MFC框架,而且比較穩(wěn)定。通過它提供的庫和工具,可以十分方便地將Win32上使用API和MFC的軟件移植到各種Unix和Linux系統(tǒng)中,大大節(jié)省移植的代價(jià),由于它是一種商業(yè)產(chǎn)品,品質(zhì)有保證,目前已經(jīng)被很多公司采用。下圖是Wind/U的系統(tǒng)結(jié)構(gòu):img/forum/uploadfile/untitled_34751072874963.jpg/img目前Wind/U已經(jīng)可以很方便地支持從Win32到Solaris、HP-UX、AIX和RedHat Linux的移植。Visual MainWin 是 MainSoft(/)公司的產(chǎn)品,它也提供了從Win32程序代碼直接生成Unix/Linux程序的方法。Visual MainWin 是一個(gè)企業(yè)級(jí)的移植和跨平臺(tái)開發(fā)軟件,它可以利用Visual C+集成環(huán)境來編寫程序,然后將它們部署到多種的Unix平臺(tái)中,并生成本地執(zhí)行程序。它由兩部分組成,Visual MainWin SDK和Visual MainWin 運(yùn)行庫, SDK是一個(gè)安裝在Visual Studio中的跨平臺(tái)插件,這個(gè)插件可以配合運(yùn)行庫來生成高可靠性的Unix平臺(tái)代碼。下圖是Visual MainWin的使用框圖:最新的Visual MainWin 5甚至可以移植.net框架和MFC7的應(yīng)用程序到Unix平臺(tái)。 2. 跨平臺(tái)模塊采用跨平臺(tái)模塊來組合開發(fā)跨平臺(tái)軟件,實(shí)際上是采用了組件的思想來進(jìn)行跨平臺(tái)軟件的開發(fā)。這種方法目前正在被廣泛采用,特別適用與具有跨平臺(tái)需求的新產(chǎn)品開發(fā)中。在新的軟件產(chǎn)品進(jìn)行設(shè)計(jì)時(shí)就考慮到跨平臺(tái)的需求,將軟件按功能分成多個(gè)可組合的模塊,定義好需求,然后由多個(gè)模塊小組獨(dú)立完成單個(gè)模塊的,并完成在目標(biāo)平臺(tái)上的測(cè)試,同時(shí)的項(xiàng)目整合小組利用開發(fā)好的模塊,組合成產(chǎn)品。由于各個(gè)模塊都是跨平臺(tái)設(shè)計(jì)的,所以整合時(shí)的跨平臺(tái)問題會(huì)大大減少,這樣可以在很短時(shí)間內(nèi)推出一個(gè)產(chǎn)品的多個(gè)平臺(tái)的運(yùn)行版本。模塊的思想非常有利于軟件的復(fù)用,一般情況下,規(guī)?;?jīng)營的軟件公司的產(chǎn)品大都形成系列化,各軟件間的都有功能交叉的部分,采用模塊化的思想,將這些部分獨(dú)立出來,交由專門的小組負(fù)責(zé)維護(hù)和升級(jí),讓各產(chǎn)品組有更多的精力放在產(chǎn)品功能的更新上,有利于公司的整體效率的提高。如果一個(gè)公司的產(chǎn)品大多是跨平臺(tái)的產(chǎn)品,那么組成專門的跨平臺(tái)模塊組是非常合適的??缙脚_(tái)模塊一般的要求也比較復(fù)雜,一般都要在三個(gè)典型的基準(zhǔn)平臺(tái)是Win32、Linux和Solaris。如果公司的產(chǎn)品還要支持Apple公司的平臺(tái),還的加上MacOS。由于平臺(tái)的多樣性,造成了跨平臺(tái)模塊開發(fā)

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論