将Unix应用步调移植到Linux体系详解
发布日期:2011-05-20
先容
您知道 Linux® 如今已是天下第二的办事器利用体系吗?即日,您的应用步调在 Linux 上运行吗?要是不是,那么本文将给您些提示和本领,在您把应用步调移植到 Linux 的时间为您提供引导。本文依据的是软件工程师的经历,这些工程师来自独立软件提供商(Independent Software Vendors,ISV)和全天下的 IBM® 实行室,他们参加了很多把应用步调移植到 Linux 的项目。
起首我们形貌 Linux 的特性和它在开辟和办理应用步调中的细致价格。接着,我们将回顾告急标题,给出包括移植的紧张步调的移植指南。着末,我们以 IBM ~ zSeries™ 为例,为您演示从一个 Linux 平台移植到另一个平台是多么的容易。(zSeries 这个词指 S/390® 和 zSeries。)
Linux 的特性和价格
开放性意味着应用步调机动性:Linux 是真正的开放体系,这使应用步调的可移植性成为实际。在很多环境下,一次大抵的重编译就能把应用步调带入 Linux。在优化您的开辟和摆设平台时,这种快速移植给您真正的机动性。
多种硬件支持意味着平台机动性:Linux 险些可在全部已知的处理惩罚处罚器上运行,无论是 RISC 还是 CISC,32 位还是 64 位。它涵盖全部典范的谋略机,从大型机办事器(IBM ~ zSeries)到 PowerPC®、Sun® UltraSPARC、Alpha、PA-RISC 和 Intel 处理惩罚处罚器,往下另有个人私家私流派字助理和嵌入式体系。分外是全部的 IBM ~ 品牌办事器都支持 Linux。
源代码的可用性意味着本身动手的机动性:与多数以二进制情势发行的贸易软件差别,Linux 内核的源代码是可以得到的。您可以拿到源代码,然后修改和重编译它,以餍足您的特定恳求。调试和解决标题或增长新的特性不再依赖恣意提供商。您可以本身作出须要的变动,只要它们切合 GNU General Public License 的规定。
严明的筹划意味着沉寂性:Linux 沉寂性是从内核上构建的,由于实现它的代码要承继成千上万的开辟者的查验,以是缺点会被趁早地发明。Linux 中建有很多路由和防火墙结果。
盛行意味着存在技能:由于 Linux 在大学和学院中盛行,以是多数新的毕业生有 Linux 经历。您险些可以在恣意都市的 Linux 用户组中找到该地区可以大概老练应用 Linux 的人,而 Web 站点和因特网消息组仍旧是 Linux 利用指南信息和非正式技能咨询的一种宝贵而有效的源头。
开始前需思量的告急标题
移植到 Linux 大概是容易的、大抵的和直接的,分外是当您的 UNIX® 应用步调的编写依照大众的开放的标准。要是您以为移植到 Linux 是有吸引力的,那么您须要阐发移植中涉及的埋伏淹灭和危害及减小它们的要领。
迁徙会涉及巨额初始投资吗?
资源 ― 移植将涉及巨大的时间、职员和款项的初期投入吗?该项目会冻结全部的别的新变乱并斲丧整个团队的资源吗?须要提前付出大量资金用度和再培训用度吗?这是不是冒着极大危害的提倡:一旦开始,要么完成,要么完全失败?
移植到 Linux 是可办理的 ― 本文的移植指南部分报告怎样一步一阵势移植而每此中间步调本身是稳固的。这使您能根据您的优先级办理资源、职员和项目。这意味着您可以独立完成每一步,在完成每步后重新预计您的优先级和目标。如许的结果是危害更容易被控制而给您的公司带来的影响更小。
资源有多大?须要花多少时间?
淹灭的时间和款项 ― 根据和移植有关的因素,全面预计您的应用步调:
编译器的差别;
您的代码中与硬件干系的布局(比喻字的长度或字节序次的干系性);
平台运行时办事;
构建东西的干系性;
数据库、联网和消息转达中间件的可用性;
用户界面的可移植性;
测试案例和测试环境。
移植的变乱量和巨大程度直接和依赖体系和环境的代码的多少成正比。要是您的应用步调只用标准的语言结会商标准的库,那么移植起来相对容易些。比喻,Java® 应用步调通常属于这一类。反之,要是您的应用步调是一个 C 步调,此中用到 Solaris 上不切合 POSIX 的办事或依赖在 Linux 上没有的第三方产品,那么移植难度将大大增长。通常,体系测试、配置的测试和软件的摆设是告急步调并且是移植的紧张部分。
我的应用步调还能在原来的 UNIX 平台上运行吗?
缓解 ― 纵然把开辟转移到 Linux 后,您仍可以保持原来的平台选择,以餍足您的别的市场。移植到 Linux 通常意味着构建东西被 GNU 东西调换,平台干系的线程库被切合 POSIX 的调换。在别的 UNIX 平台上,GNU 东西和库都能用,使您能同时分身您原来的平台和 Linux。
C 和 C++ 应用步调的移植指南
以下技能讨论来自 Solaris to Linux porting guide(1)(ibm.com/developerworks/linux/library/l-solar/),这些讨论也可被用于别的主流 UNIX 体系。
Linux 利用体系、构建东西和多数语言的编译器可免费得到并可从因特网上下载。为了开始移植,您将须要提供硬件和开辟职员:
第 1 步 ― 下载所需的开辟东西和 Linux 分发版。
第 2 步 ― 改用 Linux 开辟东西但仍旧运行 Solaris。这种要领使得变革动平缓。
第 3 步 ― 熟习 Linux 利用体系但仍旧在 Sun 硬件上运行。
第 4 步 ― 把应用步调移到目标 Linux 平台。
第 1 步:下载
以下列出的是所需的编译器、构建东西和干系的在线文档链接:
GCC(GNU Compiler Collection)东西套件包括一个 C 编译器和一个 C++ 编译器
gcc.gnu.org/releases.html
在线文档
gcc.gnu.org/onlinedocs/gcc-2.95.2/gcc_toc.html
Solaris GNU 编译器和 make(gmake)实用步调
www.sunfreeware.com/
在线文档
docs.sun.com/
gnu.org/manual/make-3.79.1/html_mono/make.html
Linux 可从以下 Linux 发行商那边得到。
Caldera www.caldera.com/
Red Hat www.redhat.com/
SuSE www.suse.com/
Turbolinux www.turbolinux.com/
― Linux 的 UltraSPARC 版本
Sun www.sun.com
第 2 步:为 Solaris 上的 Linux 构建您的 C/C++ 应用步调
摆设东西 ― 先在 Solaris 上摆设 GNU 东西。由于 GNU 编译器和 make 实用步调在 Solaris 和 Linux 上都能用,以是利用这些东西来实行初次构建您的 Linux 应用步调相对较容易。
转换 makefile ― 构建您的应用步调时请用 GNU gmake 实用步调,别用 Solaris make 实用步调。根据您的 makefile 中用到的布局,您大概遇到 GNU gmake 实用步调孕育孕育产生的错误消息,由于 GNU gmake 实用步调和 Solaris make 实用步调是有区别的。请用 make 东西文档来资助找出 makefile 中有标题标地方,然后对 makefile 作出所需的调解。
编译和调试 ― 当您通过修改您的 makefile、使之能被 gmake 利用后,把 makefile 中调用 C 编译器的名字 cc 改为 gcc,C++ 编译器的名字 CC 改为 g++。然后编译该应用步调。您在构建中所遇到的错误消息,要是有的话,可被分成两类:下令行选项标题和代码标题。
找出由于 GNU 和 Sun 编译器所承继的下令行选项有所差别而孕育孕育产生的消息。除了几个底子选项(比喻“-c”和“-g”),两个编译器能承继的多数选项是差别的。请参阅编译器文档,修改您的 makefile,以适应编译器选项间的区别。
下一步,您可以处理惩罚处罚剩下的与代码有关的错误消息和告诫。请参阅编译器文档,明白并办来由于编译器之间的差别而孕育孕育产生的标题。
第 3 步:在 Linux 的 Sun UltraSPARC 版本上构建和测试您的应用步调。
要是所移植的应用步调依赖特定的 UltraSPARC 硬件,那么这是移植进程中的告急阶段。Solaris 开辟者有机会熟习 Linux 环境而不必放弃基层的 UltraSPARC 硬件,也不必修改应用步调中特定于硬件的部分。
摆设 Linux 环境 ― 在 Sun UltraSPARC 上,摆设 Linux 和 GNU 实用步调。
编译并调试运行时 API ― 由于您在构建您的应用步调时用的是 GNU 实用步调,以是您在这步看到的区别限于 Solaris 和 Linux 之间的运行时应用步调编程接口(application programming interfaces,API)的区别。要是您想相识这些区别的更多信息,请参阅运行时接口部分(第 7 页)。映射用步调作出所需的调解。测试― 当应用步调被完全地重新构建后,举行彻底的验证测试。
第 4 步:在目标 Linux 平台上构建和测试您的应用步调。
摆设 Linux 环境 ― 在目标硬件上摆设 Linux 和 GNU 东西。
复制并重新构建应用步调 ― 把您的源代码树和 makefile 复制到新的 Linux 呆板上并重新构建应用步调。要是您没完成第 3 步,那么您大概须要修改应用步调,以适应 Solaris 和 Linux 之间运行时 API 的区别。着末,要是您的应用步调包括恣意特定于 UltraSPARC 的代码,那么,请作出所需的修改,以办理那部分代码的标题。
修改摆设例程,以适应目标 Linux 平台。种种 Linux 平台(分发版)的配置和启动文件的位置稍有差别。
测试 ― 在结束移植前,对移植的应用步调运行彻底的验证测试套件。别的,在目标 Linux 平台上测试配置和摆设。
过细!容许证和版权条款 ― 当您移植到 Linux 并把您的应用步调和开放源代码的库链接时,请过细和这些库有关的容许证和版权。至少来说,您新移植的 C/C++ 应用步调将被链接到 GNU C/C++ 运行时库。