编程语言
首页 > 编程语言> > java语言调用C++编写的本地方法

java语言调用C++编写的本地方法

作者:互联网

java语言调用C++编写的本地方法


java调用C++语言编写本地方法的步骤

package com.cycfc.maccs.utils;

public class GetFirstKey {

    public static native String getFirstKey(String str);

    static {
        // 加载动态链接库
        System.loadLibrary("firstKey");
    }

}
javac -h -jni GetFirstKey.java

在生成的头文件中,有需要实现的本地方法名,复制到C++代码中,并指定参数名称

JNIEXPORT jstring JNICALL Java_com_cycfc_maccs_utils_GetFirstKey_getFirstKey
  (JNIEnv *, jclass, jstring);

在C++代码中引入生成的头文件,然后实现具体的本地方法

#include "com_cycfc_maccs_utils_GetFirstKey.h"

JNIEXPORT jstring JNICALL Java_com_cycfc_maccs_utils_GetFirstKey_getFirstKey
(JNIEnv *env, jclass, jstring str){
  const char *pStr = env -> GetStringUTFChars(str,0);
  const char *secretKey;
  switch(*pStr){
    case '1':
    secretKey = "123";
    break;
    case '2':
    secretKey = "456";
    break;
    default:
    secretKey = "";
  }
  env -> ReleaseStringUTFChars(str,pStr);
  jstring key = env -> NewStringUTF((const char*)secretKey);
  return key;
}

linux平台制作的是.so后缀,windos平台制作的是.dll后缀,macos平台后缀是.jnilib
jni.h路径为JAVA_HOME/include
jni_md.h路径为JAVA_HOME/include/linux
如果平台是32位系统,编译动态库时加上-m32参数即可

# linux平台
gcc firstKey.cpp -m32 -I /opt/jdk1.8.0_161/include/  -I /opt/jdk1.8.0_161/include/linux -lstdc++ -fPIC -shared -o libfirstKey.so
#macos平台
gcc -dynamiclib -I /Library/Java/JavaVirtualMachines/jdk1.8.0_291.jdk/Contents/Home/include/  -I /Library/Java/JavaVirtualMachines/jdk1.8.0_291.jdk/Contents/Home/include/darwin firstKey.cpp -o libfirstKey.jnilib

标签:jstring,调用,java,C++,secretKey,本地,include
来源: https://blog.csdn.net/weixin_39146323/article/details/120418375