java调用so文件

java调用so文件:

先看头文件:

确定类,必须保持一致(包括路径:com_tracker_common_business_jobUserTag_contentTags_service_ContentTagsServiceSS)

确定需要调用的方法(例如globalInitFull,返回值为boolean):

/* DO NOT EDIT THIS FILE - it is machine generated */
#include "jni.h"
/* Header for class com_tracker_common_business_jobUserTag_contentTags_service_ContentTagsServiceSS */

#ifndef _Included_com_tracker_common_business_jobUserTag_contentTags_service_ContentTagsServiceSS
#define _Included_com_tracker_common_business_jobUserTag_contentTags_service_ContentTagsServiceSS
#ifdef __cplusplus
extern "C" {
#endif
/*
 * Class:     com_tracker_common_business_jobUserTag_contentTags_service_ContentTagsServiceSS
 * Method:    globalInit 全局初始化
 * Args:      inferenceDir    jstring Inference的路径如"C:/Inference"
 * Args:      threadCount   jint    线程数
 * Signature: ()V
 */
JNIEXPORT jboolean JNICALL Java_com_tracker_common_business_jobUserTag_contentTags_service_ContentTagsServiceSS_globalInitFull
(JNIEnv *, jobject, jstring, jint, jstring);

编写对应的java类:

package com.tracker.common.business.jobUserTag.contentTags.service;

import com.google.common.collect.Maps;
import com.tracker.common.business.contentTags.model.entity.RsmDataEntity;
import com.tracker.common.data.dao.HBaseDao;
import com.tracker.common.utils.StringUtil;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import java.util.List;
import java.util.Map;
import java.util.concurrent.atomic.AtomicInteger;

public class ContentTagsServiceSS {
    private static final Logger LOG = LoggerFactory.getLogger(ContentTagsServiceSS.class);
    public native boolean globalInitFull(String initFilePath, int threadNumber, String logpath);
    public native String getCVLabels(String input);
    public native void globalCloseFull(String initFilePath, String logpath);
    
    
    private final String EMPTYTAGS = StringUtil.STRING_2 + 0 + StringUtil.STRING_2;
    public static AtomicInteger errorCount = new AtomicInteger(0);

    public ContentTagsServiceSS(String initPath,int maxThreadNum,String logPath){
        System.load(initPath+"/SemanticLabel.so");
        globalInitFull(initPath,maxThreadNum,logPath);
    }

    public void close(String initPath,String logPath){
        globalCloseFull(initPath,logPath);
    }
}

这样的话,就搞定了一个so文件对应的相关映射类。

 

posted @ 2019-08-13 18:00  上海小墨子  阅读(8186)  评论(0编辑  收藏  举报