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

First JNI

    博客分类:
  • java
 
阅读更多
http://hi.baidu.com/fwmf/blog/item/849c1cf7ece36c3a730eecee.html

ubuntu 11.04:
cd to a dir:
1,vim HelloWorld.java:
public class HelloWorld {

        private native void print();

        public static void main(String[] args) {
                new HelloWorld().print();
        }

        static {
                System.loadLibrary("HelloWorld");
        }
}


2,然后: javac HelloWorld.java
(make sure CLASSPATH包含.)

3,javah -jni HelloWorld
to gen a HelloWorld.h file
4,vim HelloWorld.c :
#include <jni.h>
#include <stdio.h>
#include "HelloWorld.h"

JNIEXPORT void JNICALL Java_HelloWorld_print(JNIEnv *env,jobject obj){
        printf("Hello World!\n");
        return ;
}


5 cp $JAVA_HOME/include/*.h & include/linux/*.h to /usr/include/
then do:
gcc -fPIC -shared -o libHelloWorld.so HelloWorld.c
or just use :
gcc -I $JAVA_HOME/include -I $JAVA_HOME/include/linux  -fPIC -shared -o libHelloWorld.so HelloWorld.c

note don't use -c for HelloWorld.c

6 java -Djava.library.path=. HelloWorld
OK



分享到:
评论

相关推荐

    关于Java的JNI开发时使用cl编译器的说明

    示例中有一个first.c文档,在注释中非常详细地说明了怎样把first.c编译成.exe文档和.dll文档,你只需要拷贝注释中的命令,然后把命令中jdk位置修改你机器中的位置即可。 学习对象:需要在Windows环境下进行JNI开发...

    用jni获得cpu和内存使用率

    Windows API如`CreateToolhelp32Snapshot`, `Process32First`, `Process32Next`和`QueryPerformanceCounter`等可以用于此目的。 在Java端,你需要定义对应的native方法,比如`getCPUUsage()`和`getMemoryUsage()`,...

    jni-native底层实现

    ### jni-native底层实现详解 #### 一、JNI(Java Native Interface)简介 JNI(Java Native Interface)是一种标准,用于让Java代码与其他语言编写的代码进行交互,特别是C和C++。通过JNI,开发者可以利用Java语言...

    android JNI程序

    System.loadLibrary("first_jni_pro"); } native String stringFromJNI(); ... } ``` 这里的`stringFromJNI()`就是一个JNI函数,`System.loadLibrary()`加载了对应的本地库。 3. **生成JNI头文件**:使用`...

    java书籍head first java

    14. **JNI**:Java Native Interface,允许Java代码调用本地(C/C++)代码,用于提高性能或利用特定平台的功能。 《Head First Java》通过丰富的图表、幽默的插图和实际的编程示例,使得学习过程既有趣又有效。对于...

    Android通过JNI实现守护进程

    【Android通过JNI实现守护进程】 在Android开发中,创建一个持久存在于后台的应用是一个挑战,因为系统和各种安全软件可能会强制关闭服务。常见的解决方案如提高Service优先级、改变进程优先级等,但它们往往不能从...

    HelloJNIDemo

    《深入理解JNI技术:以HelloJNIDemo为例》 JNI(Java Native Interface)是Java平台标准的一部分,它为Java程序提供了一种调用本地(非Java)代码的能力。JNI在许多场景下都非常有用,例如访问操作系统特定的功能、...

    The Java. Native

    First and foremost, the book is written for developers. You will find easy steps to get started with the JNI, informative discussions on various JNI features, and helpful tips on how to use the JNI ...

    缓存工具类

    2. **缓存策略**:缓存策略主要有LRU(Least Recently Used)最近最少使用、LFU(Least Frequently Used)最不常用和FIFO(First In First Out)先进先出等。LRU和LFU根据数据的访问频率和时间进行淘汰,FIFO则按照...

    Head First Java.pdf

    19. **JNI(Java Native Interface)**:当Java程序需要调用C/C++等本地代码时,JNI提供了一种接口,实现了Java和本地代码的交互。 20. **JDBC(Java Database Connectivity)**:JDBC是Java访问数据库的标准API,...

    Inside the Java virtual machine (first edition)

    本书还详细介绍了JVM的其他组件,例如Java Native Interface(JNI)、Java虚拟机工具接口(JVMTI)等。JNI是Java虚拟机与native代码之间的接口,JVMTI是Java虚拟机工具接口,提供了对JVM的监控和调试功能。 ...

    ndk_r7_windows使用入门

    return (*env)-&gt;NewStringUTF(env, "This is the first NDK program!"); } ``` #### 五、编译生成共享库 1. **配置Makefile** - 在`$NDK/apps/myjni/jni`目录下创建`Application.mk`和`Android.mk`文件。 - `...

    JAVA与DLL交互

    - **FirstDLL**:可能是一个初学者级的DLL项目,用于展示创建和使用基本DLL的基本步骤。 - **StructDemo**:在与DLL交互时,经常需要处理结构体。此项目可能专注于如何通过JNI或JNA传递和返回结构体数据。 4. **...

    获取当前系统所有进程

    - 根据头文件编写C/C++代码,实现`getProcessList()`,并调用操作系统API(如Windows的`CreateToolhelp32Snapshot`,`Process32First`,`Process32Next`或Unix的`procfs`)来获取进程信息。 - 编译C/C++代码为库...

    在Hadoop的MapReduce任务中使用C程序的三种方法

    std::cout &lt;&lt; it-&gt;first &lt;&lt; "\t" &lt;&lt; it-&gt;second ; } return 0; } ``` 这两个C++程序分别实现了Mapper和Reducer的功能,通过标准输入输出与Hadoop Streaming进行交互,实现WordCount的统计。 总的来说,Hadoop为...

    zxing.java源码解析-Android_Interview:Android_面试

    此处延伸:项目中使用JNI的地方,如:核心逻辑,密钥,加密逻辑 16.java虚拟机和Dalvik虚拟机的区别 17.线程sleep和wait有什么区别 18.View,ViewGroup事件分发 19.保存Activity状态 onSaveInstanceState() 7.http与...

    Android键盘映射

    synchronized (mFirst) { di = new InputDevice(ev.deviceId); mDevices.put(ev.deviceId, di); configChanged = true; } } } } } }; ``` 这段代码定义了一个名为`InputDeviceReader`的线程,它不断地读取...

Global site tag (gtag.js) - Google Analytics