`
qvb3d
  • 浏览: 171180 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

java 调用gcc so

 
阅读更多

 

java 调用gcc so 

 

 

mkdir -pv com/mpjni

cd com/mpjni

 

vi mpjni.java

package com.mpjni;                                                                                  

public class mpjni                                                                                  

{                                                                                                       

    static                                                                                               

     {                                                                                                    

      System.loadLibrary("testmp");                                                                      

     }                                                                                                  

    public native static int get(); 

    public native static void set(int i); 

    public static void main(String[] args)                                                               

    {                

      mpjni app=new mpjni();                

      mpjni.set(10);                                                                                      

      System.out.println(mpjni.get());                                                                   

    }                                                                                              

}

 

编译

javac mpjni.java

 

cd ../..

 

javah com.mpjni.mpjni

 

可以产生 com_mpjni_mpjni.h

 

vi mpjni.c

 

#include "com_mpjni_mpjni.h"

int i=0;

JNIEXPORT jint JNICALL Java_com_mpjni_mpjni_get(JNIEnv *env,jclass jc)

          { 

             return i; 

           }                                                                               

JNIEXPORT void JNICALL Java_com_mpjni_mpjni_set(JNIEnv *env,jclass jc,jint j)

          {                                     

             i=j;                                                                          

          } 

 

编译mpjni.c

 

gcc -fPIC -D_REENTRANT -I/java/include -I/java/include/linux -c mpjni.c

 

 

注:/java/include       是jni.h头文件所在的路径

   /java/include/linux 是jni_md.h所在的路径

 

gcc -shared mpjni.o -o libtestmp.so

 

 

testmp 是你上面System.loadLibrary("testmp");的名字

 

格式为libxxxxxx.so

 

export LD_LIBRARY_PATH=`pwd`

echo  $LD_LIBRARY_PATH

 

java com.mpjni.mpjni

 

运行结果为 10

 

以下方法可以直接利用绝对路径来load这个so库文件

 

    static                                                                                               

     {                                                                                                    

      System.load("/root/jni/libtestmp.so");                                                                      

     }

如果需要String 字符串转换

请到

http://download.csdn.net/detail/qvb3d/5014815

下载 

我又更改添加字符串

C jstring      -> Java String

Java String -> C jstring

 

以下转换

int
float
double
string
char *

C->Java
Java->C

可以到

 http://download.csdn.net/detail/qvb3d/5015477

下载

 

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics