jni编译过程中的问题
来源:互联网 发布:java 反射 参数 null 编辑:程序博客网 时间:2024/06/03 17:29
通过JNI实现Java和C++的相互调用
一、从Java调用C++的DLL
1. 创建Java文件
创建名为TestNative的Java文件,注意包名。
package org.druze.test;
publicclass TestNative {
publicnativevoid sayHello();
publicvoid sayHello2(){
System.out.println("Say Hello From Java");
}
}
如代码所示,对于sayHello方法声明为native,这一部分将由C++的动态库来实现。
2. 生成class文件
使用javac org/druze/test/TestNative.java生成class文件
注意:执行该命令在org所在目录执行。
3. 使用javah命令生成相应的C++头文件
使用javah org.druze.test.TestNative生成名为
org_druze_test_TestNative.h的头文件
注意:执行该命令在bin所在目录执行。
该头文件的内容如下:
/* DO NOT EDIT THIS FILE - it is machine generated */
#include <jni.h>
/* Header for class org_druze_test_TestNative */
#ifndef _Included_org_druze_test_TestNative
#define _Included_org_druze_test_TestNative
#ifdef __cplusplus
extern "C" {
#endif
/*
* Class: org_druze_test_TestNative
* Method: sayHello
* Signature: ()V
*/
JNIEXPORT void JNICALL Java_org_druze_test_TestNative_sayHello
(JNIEnv *, jobject);
#ifdef __cplusplus
}
#endif
#endif
4. 创建C++解决方案
此处以VS2008为例。
新建一个VC++的Win32项目,选择如图所示的控制台应用程序。项目名称为NativeCode。
点击确定后,再点击下一步,出现该页面,应用程序类型选择DLL
5. 创建号工程之后,将org_druze_test_TestNative.h导入到工程里面,并创建名为source.cpp的源代码,内容如下:(vs导入头文件时要加入文件所在目录project->propertys->VC++directories->include directories)
#include"org_druze_test_TestNative.h"
#include<iostream>
using namespace std;
JNIEXPORT void JNICALL Java_org_druze_test_TestNative_sayHello(JNIEnv *env, jobject obj)
{
cout<<"Hello World!"<<endl;
}
(编译过程中可能会出现 error C1902 Programdatabase manager mismatch; please check your installation ,解决方式:讲\VS\Common7\IDE下的mspdb100.dll及mspdbsrv.exe复制到\VS\VC\bin下即可)
6. 在工具->选项->项目和解决方案->VC++目录菜单中,平台选择Win32,选择“显示以下内容的目录”为“包含文件”,导入jni.h和jni_md.h的路径。
7. 编译,生成NativeCode.dll,并将其copy到环境变量PATH的路径下。
8. 修改TestNative.java
package org.druze.test;
publicclass TestNative {
publicnativevoid sayHello();
publicstaticvoid main(String[] args) {
// 加载动态连接库DLL,如果没有找到的话,则会在运行时报错
System.loadLibrary("NativeCode");
TestNative tnt = new TestNative();
tnt.sayHello();
}
publicvoid sayHello2(){
System.out.println("Say Hello From Java");
}
}
运行,显示“Hello World!”
9. 注意头文件jni.h和jni_md.h可以直接导入到工程中也可以。
10.注意NativeCode.dll必须放置在java命令能访问的路径中。
运行出现Exception in thread "main" java.lang.UnsatisfiedLinkError: E:\Program Files\JAVA and Android\JDK\jre\bin\Native.dll: Can't load IA 32-bit .dll on a AMD 64-bit platform
- jni编译过程中的问题
- jni编译过程
- JNI 编译问题
- Deeplab-v2 编译过程中的问题
- jni使用中的问题
- JNI开发中的编译选项
- Android JNI编译问题汇总
- Java编译和运行过程中的编码问题
- Java编译和运行过程中的编码问题
- linux下cocos2d-x 2.2.1编译过程中的问题
- OSG程序编译与开发过程中的问题(不断更新)
- py-faster-rcnn编译过程中的问题记录
- py-faster-rcnn编译过程中的问题记录
- 编译过程中的注意事项
- Jni开发编译中的几个错误
- JNI 使用过程的一些问题处理。
- 解决Sipdroid源码jni部分编译问题
- Android NDK R8C 重新编译jni问题
- 人脸图像的几何归一化和灰度归一化
- 时间条件查询
- POJ 3261 后缀数组:求可重叠的最长重复子串
- How to remove native support from an Android Project in eclipse because eclipse is showing errors in
- 百度地图
- jni编译过程中的问题
- linux下编译vlc for android 添加 截图(去掉了画中画和路径提示)及录像功能
- 【瞎搞】HDU4940 Destroy Transportation system
- 图像灰度化
- 【NOI2007】社交网络
- Excel中文字换行
- ZOJ1657
- C++用new和不用new创建类对象区别
- SSH Secure Shell Client中文乱码的解决办法