- UID
- 1029342
- 性别
- 男
|
半年前开了个头,今天才写第二篇。这篇文章将介绍 The Open Group ARM 4.0 SDK,以及如何编译该 SDK。本文使用的是Windows 平台,当然,该 SDK 也可以很好地在 UNIX/Linux 平台下使用,有空时我会写一篇针对 Ubuntu的攻略。
ARM 4.0 SDK 包含了 C 和 Java 的实现,分别对应于 ARM 4.0 的 C 和 Java 规范。
1. 环境
需要 JDK 1.3.1 或以上,以及 Microsoft Visual C++ 6.0 或以上的支持。我使用的是 SunJDK 1.5.0 和 Microsoft Visual Studio 2005。
安装完毕后,需要设定 JAVA_HOME 环境变量,指定到 JDK 的安装路径下。这是因为该 SDK 的 Java 部分使用JNI 技术,编译时要用到 JDK 中的 jni.h 文件。
还需要修改一个 VS 的参数。打开 Tools – Options – Projects and Solutions –Build and Run,将参数 maximum number of parallel project builds设定为1。其默认值为2。这个参数控制的是并行的编译器线程数,如果设定值大于1,表示多个编译器线程可以同时访问同样的文件,这会导致资源冲突,你会看到如下错误:
fatal error C1033: cannot open program database‘c:\temp\sdk4\c\win32\objdir\debug\vc80.pdb’
2. C 部分
2.1. Agents
ARM 4.0 C SDK 包含两个 ARM agents 实现,分别是 Logging Agent 和 NullAgent。
- Logging Agent(libarm4logger.dll)会把所有 ARM 呼叫记录到一个 log 文件中或者输出至stderr。通过使用环境变量 ARM4_LOGFILE 来指定 log 文件的位置,如果没有指定 log 文件,将会缺省地输出到stderr。
- Null Agent(libarm4null.dll)正如其名字所暗示的,所有 ARM 呼叫都会被哑处理。
运行时 ARM 寻找的是名为 libarm4 的库(在 Windows 上,文件名为libarm4.dll),所以我们根据自己的需要,选择将 libarm4logger.dll 或 libarm4null.dll拷贝成 libarm4.dll。缺省情况下,该 SDK 会把 logging agent 编译成 libarm4。
2.2. 编译
在 VS 中打开该 SDK 中 C projects。依次 File – Open –Project/Solution,在弹出的对话框中选中 sdk4\c\win32\sdk4.dsw,这将一次性地打开全部projects。在弹出的确认格式转换的对话框中都回答 yes,以转化到高版本的 VS。这样,我们就打开了一个名为 sdk4 的solution,其下有18个 projects。
右键点击 solution,选中 Build Solution,即可开始编译。这时会遇到如下错误:
error BK1513: nonincremental update requires all .SBR files
查来查去没找到解决办法,最后发现,只要再执行一次 Build/Rebuild Solution就搞定了。没仔细研究为什么,懒得管了。
编译完成后你可以在 sdk4\c\win32\objdir\debug\bin 找到编译后得到的程序和库文件。
3. Java 部分
3.1. Agents
ARM 4.0 Java SDK 也包含了两个 ARM agents 实现,分别是 JNI Agent 和 NullAgent。
- JNI Agent(位于包 org.opengroup.arm40.sdk 中)会把所有 ARM 呼叫转发到安装在本地系统中的C 实现的 agent。任何兼容 ARM 4.0 规范的 C agent 都可以。
- Null Agent(位于包 org.opengroup.arm40.nullsdk 中)会把所有 ARM呼叫进行哑处理。
运行时需要在 JVM 里定义三个系统属性,分别指定三个 factory 的实现类:
- Arm40.ArmTransactionFactory
- Arm40.ArmTranReportFactory
- Arm40.ArmMetricFactory
当然也可以通过编程的方式来指定这些 factory 实现类,具体请参考 SDK 中的 Arm4TestBase 类。
3.2. 编译
在编译 Java SDK 之前必须已经完成了前面的 C SDK 的编译。
打开 sdk4\java\Makefile.win 文件,在所有(共三处)javac 指令的后面加上参数:
-encoding ISO-8859-1
否则,编译时会出现乱码警告和错误。这是因为 ARM 4.0 Java SDK 的源文件的内码是 ANSI。
打开 VS 的命令行:依次 Start – Programs – Microsoft Visual Studio2005 – Visual Studio Tools – Visual Studio 2005 CommandPrompt. 切换至 sdk4\java 目录下,然后执行:
nmake /f Makefile.win
编译结束后,将得到三个文件:
- arm40.jar : ARM 4.0 Java 规范定义的接口
- arm40sdk.jar : ARM 4.0 JNI 版实现
- arm40nullsdk.jar : ARM 4.0 Null 版实现
END! |
|