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 @   上海小墨子  阅读(8192)  评论(0编辑  收藏  举报
编辑推荐:
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
点击右上角即可分享
微信分享提示