菜鸟关于在linux上下载应用的问题

大多数语言的Linux操作系统、构建工具和编译器都是免费的,可以从网上下载。为了开始迁移,您需要提供硬件和开发人员:

步骤1-下载所需的开发工具和Linux发行版。

步骤2-切换到Linux开发工具,但仍然运行Solaris。这种方法使过渡更加平滑。

第3步-熟悉Linux操作系统,但仍在Sun硬件上运行。

步骤4-将应用程序移动到目标Linux平台。

步骤1:下载

下面列出了所需的编译器、构建工具和相关的在线文档链接:

GCC(GNU编译器集合)工具包包括一个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发行商处获得。

www.caldera.com/火山

红帽www.redhat.com/

苏珊·www.suse.com/

turbo Linux www.turbolinux.com/

Linux的UltraSPARC版本

孙www.sun.com

步骤2:在Solaris上为Linux构建C/C++应用程序。

安装工具—首先在Solaris上安装GNU工具。因为GNU compiler和make utility可以在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:在Sun UltraSPARC版本的Linux上构建并测试您的应用程序。

如果移植的应用程序依赖于特定的UltraSPARC硬件,这是移植过程中的一个重要阶段。Solaris开发人员有机会熟悉Linux环境,而无需放弃底层UltraSPARC硬件或修改应用程序的硬件特定部分。

安装Linux环境—在Sun UltraSPARC上,安装Linux和GNU实用程序。

编译和调试运行时API——因为您在构建应用程序时使用了GNU实用程序,所以您在此步骤中看到的差异仅限于Solaris和Linux之间的运行时应用程序编程接口(API)的差异。如果你想知道更多关于这些区别,请参考运行时接口部分(第7页)。对应用程序进行必要的调整。

测试——当应用程序完全重建后,进行彻底的验证测试。

步骤4:在目标Linux平台上构建并测试您的应用程序。

安装Linux环境—在目标硬件上安装Linux和GNU工具。

复制并重建应用程序——将源代码树和makefile复制到新的Linux机器上,并重建应用程序。如果您没有完成第3步,您可能需要修改您的应用程序,以适应Solaris和Linux之间运行时API的差异。最后,如果您的应用程序包含任何特定于UltraSPARC的代码,请进行必要的修改以解决该代码的问题。

修改安装例程以适应目标Linux平台。各种Linux平台(发行版)的配置和启动文件的位置略有不同。

测试—在结束迁移之前,对迁移的应用程序运行全面的验证测试套件。此外,在目标Linux平台上测试配置和安装。

警告!许可和版权条款—当您迁移到Linux并将您的应用程序与开源库链接时,请注意与这些库相关的许可和版权。至少,您新移植的C/C++应用程序将链接到GNU C/C++运行时库。这些库受GNU宽松通用公共许可证保护。如果您的移植软件获得了专利,并且您想在使用GNU工具构建后出售它,谨慎的做法是完全理解GNU通用公共许可证和GNU宽松通用公共许可证(www . GNU . org/licenses/licenses . html)中列出的条款和条件。如果您的软件链接到受GNU许可证保护的库,GNU许可证中的一些条款和条件也将适用于您的软件。

Java应用程序移植指南

步骤1-下载所需的开发工具。

步骤2-在目标Linux平台上使用应用程序。

步骤1:下载

把用Java编写的应用程序的开发从Solaris转移到Linux是非常简单的。完成迁移任务所需的工具有:

Java 2 Developer Kit的Linux版本包括一个重构的Java虚拟机(JVM ),它具有改进的实时编译功能,即ibm.com/developerworks/java/jdk/linux130/.

GCC工具包包括一个Java编译器(gcj)gnu.org/software/gcc/java/.

步骤2:在目标Linux平台上使用应用程序。

不管JVM运行在什么操作系统上,JVM都接受相同的字节码,所以你可以选择在一个操作系统上编译Java源文件,然后在另一个操作系统上运行生成的类文件。例如,如果Linux是您的主要开发平台,那么您在Linux上创建的Java类文件可以在Solaris或其他具有兼容JVM的平台上同样运行良好。

运行时接口

尽管Linux和Solaris的大多数运行时接口是相同的,但还是有一些差异。在您的应用程序中,每一个在Linux上没有或不完全相同的Solaris接口的地方都需要修改,否则您的应用程序无法正确构建。下面列出了不同之处。

系统调用、C库和C++库

API差异—Solaris内核提供逻辑卷支持、文件访问控制列表(ACL)管理和系统审计日志功能。Linux API中的这些特性(如果有的话)与Solaris中的不同。另外,默认情况下,Linux不支持流。在网络中使用流的应用程序需要使用POSIX套接字。此外,Linux上的许多Solaris API使用不同的返回和参数类型,或者在不同的头文件中声明。但是,这些差异通常很小,通常不需要修改应用程序中的代码。

C++库-Solaris forte6C++编译器包含三个类库:复数(-compat=4)、经典iostream和标准c++库(包含标准复数和iostream)。GCC只包含标准C++库。如果移植的应用程序使用-compat=4复杂库或经典iostream库,则应用程序需要使用标准C++库中包含的那些库的标准版本。进行这种修改的额外好处是提高了应用程序的可移植性。

桌面:CDE vs侏儒/KDE

图形用户界面(GUI)— Solaris的默认桌面通用桌面环境(CDE)不包含在通用Linux发行版中。对于需要CDE的应用程序或喜欢这种特殊GUI环境的用户,可以从www.xig.com的Xi图形公司获得Linux版本的CDE DeXtop产品。运行DeXtop Linux将Solaris用户置于一个熟悉的GUI环境中,这样他们可以很容易地适应迁移到Linux所带来的变化。

DeXtop需要使用Accelerated-X Linux X-Server,这也是由Xi图形公司提供的。虽然XFree86 Linux X-Server可以运行Dextopp,但是Xi图形并不正式支持在XFree86上运行Dextopp。

线程和进程管理

线程/轻量级进程(LWP)支持—Solaris支持POSIX线程和特定于Solaris的线程模型。如果移植的应用程序使用特定于Solaris的线程API,最好将应用程序改为POSIX线程。POSIX线程的可移植性更强,Linux也支持。

进程管理:/proc文件系统-/proc伪文件系统提供了一种访问内核数据结构的便捷方式。在Solaris上,/proc包括关于活动进程和线程的信息,并且/proc还提供控制这些进程和线程的接口。调试器通常使用Solaris上的/proc控制接口来跟踪程序的执行。在Linux上,/proc不提供进程控制接口。在Linux上调试时,要控制进程,请使用ptrace() API而不是/proc。

运行时要考虑的因素

系统管理:一般来说,管理Linux与管理任何其他UNIX操作系统非常相似。但是在一些命令和任务的细节上有所不同。IBM和UNIX Guide(unixguide.net/unixguide.cgi)公布了一个对比图,不仅总结了Solaris和Linux的一些区别,还总结了AIX和其他版本UNIX的区别。有经验的Solaris系统管理员可以很容易地使用Linux,没有太大的困难。

其他第三方工具、实用程序和库:在Solaris上常见的许多流行的第三方工具、实用程序和库在Linux上也可用,例如:

Rational Rose和其他Rational产品可以在Solaris和Linux上使用。

Rogue Wave SourcePro C++库可以在Forte/Solaris、GCC/Solaris和GCC/Linux上使用。

Trolltech Qt C++ GUI框架可以在Solaris和Linux上使用。

由于Linux的日益普及,支持Linux的第三方厂商越来越多。

尾数格式—Sun SPARC和UltraSPARC处理器以大尾数格式存储整数。如果你想把你的应用移植到使用小尾数方法的Linux版本,比如Linux/Intel,那么你必须解决应用中所有尾数格式的依赖关系,这样应用才能正确运行。另一种方法是将应用移植到Linux/PowerPC,zSeries上的Linux或者Linux/UltraSPARC(两个平台都是大尾数法)而不是Linux/Intel。

在zSeries上从Linux移植到Linux

现在Linux移植到一个平台(比如Intel)已经完成了,那么Linux移植到其他硬件平台呢?简单的回答是:很容易。

出于以下两个原因,我们选择zSeries作为示例。

ZSeries是一个很好的从一个Linux移植到另一个Linux的例子,因为zSeries的架构与Intel的完全不同。许多ISV首先将其UNIX应用移植到英特尔上的Linux,这当然是一个自然的选择。那么把应用移植到zSeries上的Linux就不需要太多努力了。

由于其在虚拟化领域的独特功能及其硬件可靠性和可用性,zSeries可能是一个对您有吸引力的平台。

为什么要在zSeries上移植到Linux?

zSeries上的Linux是纯Linux:它不是现有zSeries操作系统上的特殊Linux,也不是针对zSeries架构修改的特殊版本的Linux。zSeries上的Linux和其他平台上的Linux的特点是一样的,比如它是纯ASCII环境。对于所有的架构,大多数Linux结构都是一样的。与zSeries相关的修改使Linux能够与zSeries内存、zSeries磁盘和通信硬件进行通信。Linux和应用程序之间的接口以及Linux和用户之间的接口不受影响。

应用程序的优势—您在zSeries上的Linux中的Linux/UNIX应用程序使您能够访问存储在zSeries环境中的企业数据(后端集成)。这提高了响应速度并减少了不必要的数据重复。zSeries出色的容量、可伸缩性、可靠性、可用性和安全性使其成为企业服务器应用程序的完美部署平台。此外,在业务环境中,zSeries上的Linux减少了服务器的数量,从而简化了操作,降低了成本。

在zSeries上移植Linux的技巧和技巧

这些技巧和诀窍是由IBM技术团队总结的,该团队负责将应用程序移植到zSeries上的Linux。该文件的全文可从ibm.com/servers/esdd/articles/linux_s390/index.html.获得

小尾数法到大尾数法

S/390是一个大尾数系统。如果代码要处理在小尾数系统上生成的面向字节的数据,那么代码可能需要某种字节交换。这些数据可能需要重新生成,如果做不到这一点(例如* * * *喜欢的文件),那么就需要修改应用程序以适合处理小尾数数据。如果原平台是大尾数平台(比如UltraSPARC,IBM pseries?.....),那就不存在这个问题了。

汇编码

汇编代码需要用S/390汇编程序重写。所有操作代码都需要更改为S/390操作代码。如果应用程序代码使用汇编头文件,则需要S/390版本的头文件。S/390汇编代码的Linux版本使用S/390操作码,但遵循GNU汇编程序的语法约定。你可以从www.gnu.org/manual/gas-2.9.1/as.html.下载GNU汇编程序手册

绝对地址和高位

一些应用程序出于各种目的使用硬编码地址。一个可能的目的是用mmap()在内存中定义固定的页面用于分配或内存映射。mmap()调用的一种形式允许页面锁定。在这种模式下,mmap()尝试使用所请求地址的内存进行内存映射。在Intel平台上,这个地址可能被指定在不能使用zSeries上的Linux的地方。

每个平台可能会选择不同的程序堆栈位置、系统库、堆等。所以在移植到其他系统时,硬编码的地址通常是一个糟糕的选择。zSeries的寻址模式也会忽略高阶位,所以硬编码的地址0x80000000(高阶位是1)会转换成0x00000000,这是zSeries上的保留地址。生成地址时,对地址的算术运算也可以使高位变成1。

如果应用程序由于使用绝对地址而产生段冲突或其他错误,则必须对其进行修改。/proc//map显示活动进程如何使用其寻址空间中的存储范围。如果代码必须使用绝对地址,那么这个映射可以用来查找没有被保留的地址范围。

有些地址字段的高位可以用“与”(31位模式位)改成0。如果地址用于算术运算,那么你必须这样做。

应用开发工具

在目标服务器上部署应用程序需要一套强大的工具。ibm.com/servers/eserver/zseries/os/linux/ldt/的网站描述了在zSeries上开发或移植Linux的C/C++应用程序的几个阶段,并给出了每个阶段的有用工具列表。

杂物

Ptace和return结构ptrace和return结构的使用与体系结构有关。

配置/构建/Makefile脚本或文件—很可能需要增加对S/390平台的支持。

Proc文件系统—存在一些差异,例如:

/proc/cpuinfo格式不同。

/proc/中断未实现。

/proc/stat不包含INTR信息。

Char是无符号的——在zSeries上,字符类型char默认被解释为无符号的char,而在其他平台上,char被解释为有符号的char。

va _ args—在zSeries版本的Linux中,va_list的定义与其他平台不同。如果您的应用程序简单地使用c赋值语句来复制va_list,那么在Linux的zSeries版本中,您必须使用_va_copy宏来代替。