WEB开发网
开发学院软件开发Java 调试集成 Java 和 C/C++ 的代码 阅读

调试集成 Java 和 C/C++ 的代码

 2010-01-25 00:00:00 来源:WEB开发网   
核心提示: GCC 编译标准 Java 分发版不带 GCC 库,所以编译有些复杂,调试集成 Java 和 C/C++ 的代码(10),对于上面的示例,通过下面的命令序列,在享用强大的,但不是纯 Java 语言的应用程序的好处时,我使用了 MinGW 工具箱:基于 def 文件,生成 GCC 的库文件

GCC 编译

标准 Java 分发版不带 GCC 库,所以编译有些复杂。对于上面的示例,通过下面的命令序列,我使用了 MinGW 工具箱:

基于 def 文件,生成 GCC 的库文件。用以下内容创建一个名为 jvm.def 的文件。
EXPORTS 
    JNI_CreateJavaVM@12 


如果在 libjvm 文件中运行比如 dumpbin 或者 nm 这样的工具,则可以为其它的“调用 API”抽取引用。

创建一个应用程序可以链接的库文件。 dlltool -k --input-def jvm.def --dll jvm.dll --output-lib libjvm.a 

编译 C 应用程序。 gcc -Ic:\_jdk\include -g -c main.c 

将主应用程序与 JVM 链接在一起。 gcc -o main.exe main.o -L./ -ljvm 

一些关键性 JNI 技巧

以下是使用 JNI 的一些技巧,可以用来避免一些常见问题:

始终检查 JNI 调用的返回值和异常。

在检查异常时,记住如果调用了 ExceptionDescribe() ,那么可能得到的描述过的异常是一段时间以前发生的,而不是最后一次调用的结果。

记住在任何线程终止前调用 threadDetach() 。如果执行调用失败,在垃圾收集器运行时,可能导致大问题。它将试图查找已经不存在的线程的堆栈帧。

和 JPDA 一起运行时,始终使用 java.compiler=NONE 。如果使用 java.compiler=fred ,那么 JNI 将停止 JIT,但实际上它没有起作用。

如需了解更多内幕,建议参考 Sheng Liang 所著的 The Java Native Interface和 Sun 的 JNI 站点。如果想要阅读 Essential JNI一书(其中关于 JNI 基础的章节写得很好),请注意其 Java 2 函数是基于 JDK beta 版的,因此它们没有那样的形式。

切记,在享用强大的,但不是纯 Java 语言的应用程序的好处时,不要忘记如何使用 JNI 来实现一个完整、复杂的调试过程。

上一页  5 6 7 8 9 10 

Tags:调试 集成 Java

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接