关闭

java调用.so文件

5563人阅读 评论(1) 收藏 举报
分类:

//第一步,

public class JavaToCTest

{

private native void sayHello();//声明本地方法.

static

{

System.loadLibrary("JavaToCTest");//需要加载的so库文件的名称,在linux中会在上前缀"lib"+库文件的名称.

}

public static void main(String[] args)

{

new JavaToCTest().sayHello();

}

}


//第二步,在linux系统中使用如下方法生成头文件.

javah -jni  JavaToCTest         使用该方法生成的头文件如下. 生成的文件是: JavaToCTest.h


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


#ifndef _Included_JavaToCTest
#define _Included_JavaToCTest
#ifdef __cplusplus
extern "C" {
#endif
/*
 * Class:     JavaToCTest
 * Method:    printlns
 * Signature: ()V
 */
JNIEXPORT void JNICALL Java_JavaToCTest_sayHello (JNIEnv *, jobject);
#ifdef __cplusplus
}
#endif
#endif


//第三步,编写 c 代码, 该文件的名称为 JavaToCTest.c

内容如下:

#include <stdio.h>

#include <jni.h>

#include "JavaToCTest.h"


JNIEXPORT void JNICALL Java_JavaToCTest_sayHello(JNIEnv *env ,jobject obj)

{

printf("Java To C !!!!!   \n");

return;

}


//第四步:

编译生成库文件. 这个文件的文件名称为: libJavaToCTest.so

 gcc -I/usr/lib/jvm/java-6-openjdk/include/linux -I/usr/lib/jvm/java-6-openjdk/include/ -fPIC -shared -o  libJavaToCTest.so  JavaToCTest.c


//第五步:

运行java文件.

为了让java找到此so,运行:export LD_LIBRARY_PATH=.,将当前目录加入此环境变量。

java  JavaToCTest


如果看到 java To C 说明调用成功.














0
0
查看评论
发表评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场

Linux平台Java调用so库-JNI使用例子

1.确保gcc编译器已安装 2.编写HelloJNI.java代码,用native声明需要用C实现的函数。 如果源程序是包含在package里的话,应该建立同样的文件夹结构,比如/home/swan/test/net/wangliping/HelloJNI.java package...
  • rocgege
  • rocgege
  • 2017-02-28 09:04
  • 3114

java调用so库

Jnative的使用(Linux系统下so调用) 1.环境配置 下载JNative_src.zip和JNative.jar,JNative_src解压会有JNativeCpp.dll和libJNativeCpp.so。JNativeCpp.dll是针对Windows,将其放在system32下面...
  • kj654
  • kj654
  • 2015-12-29 12:03
  • 3871

android java文件调用.so文件

一 . 把编译好的.so库考到android工程下面,注意文件夹结构不能改变。否则加载库则出现找不到的问题。        工程图如下图所示:        二 ...
  • u010696783
  • u010696783
  • 2016-01-05 15:33
  • 496

Linux下Java调用so文件

Linux下Java调用C语言的so文件,需要进行System.loadLibrary("lib***.so"); 注意这里只需要写***,lib和so都不要。 出现java.lang.UnsatisfiedLinkError: no *** in java.library.pa...
  • libing06081227
  • libing06081227
  • 2015-09-08 15:39
  • 4164

Eclipse下NDK开发(java调用so文件)

eclipse下两种配置方式: 一种是右键工程选择properties->builders->new->program,然后再做相应的选择,因为这种方式我没有尝试过,网上也有例子,所以我就不做详细的说明。 另一种方式:先加载ndk路径: 选择标题栏的E...
  • cym492224103
  • cym492224103
  • 2014-09-03 17:03
  • 1853

Java调用C/C++动态库so

参考网址 关于java调用C接口时,类型的转换,如char*  http://blog.csdn.net/zht666/article/details/22786123 JNI的替代者—使用JNA访问Java外部功能接口  http://www.cnblogs.com...
  • geqiandebei
  • geqiandebei
  • 2015-07-13 22:58
  • 5601

java jni 调用.so动态库

最近要用到JNI调用动态库,原来根本没接触过有没有,完全听不懂别人说的啥啊,自己鄙视自己一把。 从别的部门同事那里拿来的源码都不会用,于是就学习了一下如何从c文件生成.so文件,再供java调用。 有相当部分内容是网上找来的,自己汇总了一下。 第一步,从.c生成到.so...
  • u013774543
  • u013774543
  • 2015-01-06 11:09
  • 2927

Linux平台Java调用so库-JNI使用例子

之前做过一个项目有用到过JNI,最初也是各种不懂,经过自己的不断摸索,开始有了眉目,知道的了怎么使用。我是有在Linux和windows平台都用了JNI,在这里简单分享以下在Linxu平台上开发用了JNI的简单步骤和小demo。楼主亲测可用,要是有不对的地方,欢迎指正! 之前写了一遍windows平...
  • u010212643
  • u010212643
  • 2017-04-07 15:45
  • 1215

Liunx java-eclipse下C++的so库的调用(上)

欢迎转载,转载请说明。   网上很多界绍使用JAVA调用C/C++的SO库,但从例子中大多都是一个简单的C语言文件,然后进行编译打库。 这些例子只能带给我们了解打库和调用步骤,在实际项目过程中,遇到的并非想象中的哪么简单。 下面我将以一个C++的例子来演示从打库到调用的全过程,希望...
  • fengsh998
  • fengsh998
  • 2012-11-06 01:12
  • 10485

Java中的jar和so文件的区别

Java中有jar和so文件,但是Android中也有jar和so文件。但是两者有什么区别呢?So文件:.so文件是Linux系统的可执行文件,相当于windows上的exe执行文件,只可以在Linux系统运行。so文件就是常说的动态链接库,都是C或C++编译出来的。与Java比较就是:它通常是用的...
  • zhaomengszu
  • zhaomengszu
  • 2017-01-15 15:01
  • 2662
    个人资料
    • 访问:92077次
    • 积分:1566
    • 等级:
    • 排名:千里之外
    • 原创:56篇
    • 转载:3篇
    • 译文:0篇
    • 评论:16条
    最新评论