初试JNI(ubuntu idea clion完整详细步骤)
程序员文章站
2022-06-12 18:14:00
...
1. 安装java
Ubuntu直接采用apt安装,具体安装步骤百度即得,或者终端输入
java -version
根据提示进行安装。
2. 安装idea
参考:https://www.linuxidc.com/Linux/2016-12/137946.htm
3. 在idea创建java文件:
public class JniExample {
static {
System.load("/root/IdeaProjects/JNItryagain/libtest32.so");
}
public native String getStringFromC();
public static void main(String[] args){
System.out.println(new JniExample().getStringFromC());
}
}
4. 生成.h文件
点击build,会生成一个out文件夹,里面包含jniExample.class,打开终端在包含jniExample.class的路径下运行
javah JniExample
运行javah时,class文件和java文件不能放一起,详情见上条博客。
5.拷贝生成的jniExample.h到新建的clion项目。
打开clion,生成一个新的项目,将刚刚生成的jniExample.h拷贝到这个项目中,同时也把j/usr/lib/jvm/java-8-openjdk-amd64/include下的jni.h,以及 /usr/lib/jvm/java-8-openjdk-amd64/include/linux下的jni_md.h拷贝到项目中。即本项目现在有五个文件:jni.h jni_md.h JniExample.h
/* DO NOT EDIT THIS FILE - it is machine generated */
#include "jni.h"
/* Header for class JniExample */
#ifndef _Included_JniExample
#define _Included_JniExample
#ifdef __cplusplus
extern "C" {
#endif
/*
* Class: JniExample
* Method: getStringFromC
* Signature: ()Ljava/lang/String;
*/
JNIEXPORT jstring JNICALL Java_JniExample_getStringFromC
(JNIEnv *, jobject);
#ifdef __cplusplus
}
#endif
#endif
main.cpp
#include "JniExample.h"
JNIEXPORT jstring JNICALL Java_JniExample_getStringFromC(JNIEnv *env, jobject thisObj) {
return (env)->NewStringUTF("hello from libtestcpp");
}
CMakeLists.txt.
6. 生成.so文件
gcc -m32 main.cpp JniExample.h jni.h jni_md.h -fPIC -shared -o libtestcpp32.so -lstdc++
-m32是生成32位的so文件,-lstdc++ 表明编译的是c++文件。
若此时报错 bits/c++config.h: No such file or directory,则需要安装多版本编译模式:
sudo apt-get install gcc-multilib g++-multilib
7. 拷贝so文件
将生成的libtestcpp32.so文件拷贝到idea的项目中,位置如下:
/root/IdeaProjects/JNItryagain/libtestcpp32.so
8. 运行结果
hello from libtestcpp
Process finished with exit code 0
上一篇: Git 开发流程规范
下一篇: git开发流程 公司项目开发流程