JNI :java 调用C++动态库

来源:互联网 发布:二次元测量仪软件模拟 编辑:程序博客网 时间:2024/05/20 22:04
二:java调用so(C) 
   java和c / c++通信都可以通过jni来实现。 在java代码中: 
   System.loadLibrary("Hello"); 
   Hello不能写成Hello.dll或者Hello.so,它会根据系统平台自动填充,需要注意的是在unix/linux下生成.so动态库文件的时候, 

   需要在Hello.so前添加lib,否则找不到.so文件(libHello.so),运行的时候需要指定.so的路径: 

public class bridge{
    public bridge(){};
    public native String gasr(String vidioName);
    public native void cutFrame(String vidioName, String r);
    
    public static void main(String[] args)
    {
        try{

      #这里的C++ 动态库直接库名,不用绝对路径。但是在运行时候需要制定so库的绝对路径。

      # java  -Djava.library.path=/homw/user/so所在目录  -jar  Hello.jar 

            System.loadLibrary("bridge");
        }catch(UnsatisfiedLinkError e){
            e.printStackTrace();
        }
        bridge so = new bridge();
        
        so.cutFrame("/home/vedio/build/tmp/test.mp4", "0.1");
        String result = so.gasr("/home/vedio/build/tmp/test.mp4");
        System.out.println(result);
    }
}

 可以在任意路径执行。

  java c bridge.java 

   java  -Djava.library.path=/homw/user/so所在目录   bridge

   
原创粉丝点击