快速业务通道

在异构UNIX系统间可靠的迁移Java应用 - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-17

在异构UNIX系统间可靠的迁移Java应用(7)

时间:2011-04-16 IBM Shen Yu

GCC 标志(本地 makefile 的平台特定部分)有所不同。同时,在每个平台上构建本地组 件的步骤大致上是相同的。为了避免重复,每个模块的构建步骤只需要一个 makefile。图 3 显示了这个结构,它从常量(构建步骤)中提取变量(GCC 标志)。它还使得新的平台特定 的本地代码成为可插入的。

图 3. 将构建步骤和构建标志分开

在异构UNIX系统间可靠的迁移Java应用 - 编程入门网

在这个解决方案中,每个模块的 makefile 放在 <module-name>/native/ 目录中 ,而 GCC 标志 (<platform>.mk) 位于每个平台的 make/platform 目录中。在构建过 程中,每个模块的 makefile 将在运行时自动查找 <platform>.mk 文件(稍后将介绍 其中使用的技术),并包含它们以组成一个完整的本地构建脚本。脚本还可以在特定的目录 (例如,AIX.s390)中选择平台特定的代码进行编译。

要使得前面的示例兼容于这种结构,需要进一步对 makefile 进行划分。下面的清单 13 、14 和 15 显示了这种划分。

清单 13 显示了用于前面示例的模块特定的 makefile(在 makefile 文件中)。

清单 13. 用于 Hello 程序的模块特定的构建步骤

1  include ../../make/defines.mk 2  include ../../make/platform/$(HY_PLATFORM).mk 3  CFLAGS+= $(SRCS) 4  CFLAGS+= $(INCLUDES) $(OPT) 5  CFLAGS+= -static -lc 6  PROGNAME= libhellolib.so 7  include ../../make/rules.mk

清单 14 显示了常用的宏(在 defines.mk 文件中),这些宏定义了使用哪个 GCC、使用 哪个 ld 以及使用哪些平台特定的本地代码。

清单 14. defines.mk 中常用的宏

1  CC= gcc 2  ifneq ($(HY_OS),aix) 3  DLL_LD = $(CC) 4  else 5  DLL_LD = $(LD) 6  endif 7  INCLUDES= -I/home/robert/jdk1.5.0_07/include 8  INCLUDES+= -I/home/robert/jdk1.5.0_07/include/linux 9  SRCS=$(HY_PLATFORM)/hello.c

在异构UNIX系统间可靠的迁移Java应用(8)

时间:2011-04-16 IBM Shen Yu

清单 15 显示了平台特定的 GCC 标志(在 <platform.mk> 文件中)。

清单 15. <platform>.mk 中平台特定的 GCC 标志

1  CC= gcc 2  ifneq ($(HY_OS),aix) 3  DLL_LD = $(CC) 4  else 5  DLL_LD = $(LD) 6  endif 7  INCLUDES= -I/home/robert/jdk1.5.0_07/include 8  INCLUDES+= -I/home/robert/jdk1.5.0_07/include/linux 9  SRCS=$(HY_PLATFORM)/hello.c

清单 16 显示了一般的构建步骤(在 rules.mk 文件中)。

清单 16. rules.mk 中一般的构建步骤

1 all: $(PROGNAME) 2 $(PROGNAME): 3 $(DLL_LD) -o $(PROGNAME) -shared \ 4 -Wl,-soname,libhello.so $(CFLAGS)

在需要一个新的平台支持时,如 Linux on x86,开发人员可以将 linux.x86.mk 文件添 加到 make/platform 目录,并将平台特定的本地代码放到 <module>/native/linux.x86 目录中。在构建的过程中,构建系统使用相应的技术( 稍后将作介绍)动态地查找正确的组件。

设计源代码的布局

这个部分描述了源代码的布局。通常一个企业项目中包含许多组件。假设您有四个组件:

一个纯 Java 组件,用于与用户进行交互

三个 JNI 组件:thread,用来处理实时线程;archive,用来进行压缩和解压缩;net, 用来处理套接字函数

在 JNI 组件中,Java 代码和对应的本地代码之间是高度相关的,所以应该将它们放在一 起。用于该模块的 makefile 和 Ant 构建脚本也应该放在相同的文件夹中。图 4 显示了整 个源代码布局。

图 4. 代码布局和构建脚本

在异构UNIX系统间可靠的迁移Java应用 - 编程入门网

在异构UNIX系统间可靠的迁移Java应用(9)

时间:2011-04-16 IBM Shen Yu

在这个布局中,make 目录拥有一个

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号