日期:2014-05-19  浏览次数:20717 次

java 如何调用 linux下的 。so文件
在 window 上写代码 然后部署到 linux服务器 调用这个 .so 文件 这个服务

java 如何调用 linux下的 。so文件

给我的 接口是 start(long useid)

让我调用这个起服务  

这个文件在 /cstor/lib/ 下

static {
// 加载动态库 , .so 名称
System.loadLibrary("/cstor/Lib/NVRCModule");  
//System.loadLibrary(libname)
}
System.loadLibrary("/cstor/Lib/NVRCModule.so");  

System.loadLibrary("NVRCModule");  

怎么写都找不到库 加载不了 网上说的我看了些 没有太全的


请帮助做过的说下 白

------解决方案--------------------
给个参考:
java类:

public class Abc {
static {
System.loadLibrary("abc");
}

public native static String getAbc();

public static void main(String s[]) {
System.out.println(getAbc());
}
}

#~~~~~~~~~~~~~~~~~

终端敲入:

java Abc.java

javah Abc

#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~````

生成Abc.h的头文件,内容如下:

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

#ifndef _Included_Abc_GetAbc()
#define _Included_Abc_GetAbc()
#ifdef __cplusplus
extern "C" {
#endif
/*
* Class: org_hexun_wangchong_admin_gethardware_GetHardWareInfo
* Method: getHardWareInfo
* Signature: ()Ljava/lang/String;
*/
JNIEXPORT jstring JNICALL Java_Abc_getAbc
(JNIEnv *, jobject);

#ifdef __cplusplus
}
#endif
#endif

#~~~~~~~~~~~~~~~~~~

写Abc.c文件,内容:

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <string.h>
#include <sys/io.h>
#include "org_hexun_wangchong_admin_gethardware_GetHardWareInfo.h"

JNIEXPORT jstring JNICALL Java_Abc_getAbc
(JNIEnv *env, jobject t)
{
char *hd_sn_ptr="hello world";

//////////////////
jstring str ;
str = (*env)->NewStringUTF(env,hd_sn_ptr);
///////////////////////////
return str;
  
}

#~~~~~~~~~~~~~~~~~~~~~~~

生成so库

gcc -I/jdk/include -fPIC -c abc.c

gcc -shared -WI abc.o -o libabc.so

复制libabc.so到jdk/jre/lib/i386下

终端运行:

java Abc

------解决方案--------------------
JNI技术
调用第三方so(linux系)或dll(windows系),可以通过JNI来调用自己开发so或dll去调用第三方的so或dll
JNI是什么,LZ自己谷哥百度一下就知道了,1L就已经给出一个sample了