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

下载

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值