`
asdf314159265
  • 浏览: 246230 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
社区版块
存档分类
最新评论

Eclipse c++ 编写JNI心得

 
阅读更多
1.Eclispe C++中必须创建C++工程,C工程不行。
2.在工程的properties的C/C++ Build-->Settings-->Includes中添加:
(1)."C:\Program Files\Java\jdk1.6.0_25\include"
(2)."C:\Program Files\Java\jdk1.6.0_25\include\win32"
3.生成的dll放到C:\windows\System32下,或放到项目目录的src、bin的同一级目录。
4.如果不出意外会出现如下错误:
java.lang.UnsatisfiedLinkError: XXXclass.XXXmethod()

解决方法:
这个错误是 在这个dll里找不到方法的声明,(搞了一下午害我差点装VC了,还借用到了dll查看工具)
网上说是@符号的问题 ,解决方法是用gcc 编译的时候指定参数
第1种方法:
gcc -Wl,--kill-at -shared -o jnihello.dll Native.c
这种方法生成不带@的函数声明

第2种方法:
gcc -Wl,--add-stdcall-alias -shared -o jnihello22.dll Native.c
这种方法会生成2个函数声明,一个是带@的 一个是不带@的。

第3种方法:
在你的本地方法的头文件中中的函数前面加上下划线,比如以前是
JNIEXPORT void JNICALL Java_TestNative_Hello (JNIEnv * , jobject );
现在改成
JNIEXPORT void  JNICALL  _Java_TestNative_Hello (JNIEnv * , jobject );
同时你的实现的cpp文件或者c文件里的函数头也要一致 前面有下划线。

如果你需要查看dll的导出函数声明可以用以下2个工具
1: dllexp
2:Anywhere PE Viewer

分享到:
评论

相关推荐

    C++库封装JNI接口-实现java调用c++

    总结,C++库封装JNI接口实现Java调用C++涉及的主要步骤包括:声明Java中的本地方法,生成JNI头文件,编写C++实现,编译成库,最后在Java中加载并调用。这个过程需要理解Java和C++之间的数据类型转换,以及如何在两种...

    cocos2dx 3.3工程,C++通过JNI与Java相互调用

    在Android平台上,由于游戏引擎底层通常采用C/C++编写,而Android SDK主要基于Java,因此需要JNI来桥接这两者。 首先,我们需要了解Cocos2dx 3.3的工程结构。Cocos2dx工程通常包含多个子目录,如src、res、proj....

    Eclipse里Android JNI的开发方法

    ### Eclipse里Android JNI的开发方法 #### NDK开发环境安装 **Native Development Kit ...通过上述步骤,开发者能够在Eclipse环境中顺利进行Android JNI的开发工作,充分利用C/C++的优势来增强应用的功能性和性能。

    教你java和C++的jni编程

    Java和C++之间的JNI(Java Native Interface)编程是一种技术,允许Java代码调用本地(非Java)代码,如C++,反之亦然。这在需要高效计算能力、利用硬件特性或者整合现有C/C++库时非常有用。以下是对标题和描述中...

    配置NDK集成eclipse使用hello-jni实例

    NDK(Native Development Kit)是Android开发中的一个重要工具集,它允许开发者使用C和C++编写部分程序,将这些代码编译成.so动态链接库,然后通过Java的JNI(Java Native Interface)在Android应用中调用。...

    Eclipse_Jni_Opencv_NDK

    总的来说,"Eclipse_Jni_Opencv_NDK"是一个关于在Eclipse环境中使用JNI、OpenCV和NDK开发Android应用的教程或项目,涵盖了从环境配置、代码编写到构建和调试的全过程。这不仅要求开发者熟悉Java,还要掌握C/C++和...

    visual studio 2019下C++通过JNI调用JAVA代码

    在本文中,我们将深入探讨如何在Visual Studio 2019环境下使用C++通过Java Native Interface (JNI)来调用Java代码。JNI是Java平台的一部分,它为Java应用程序提供了与本地代码交互的能力,使得开发者可以将Java应用...

    简洁使用 eclipse+mingw 环境编译 java jni

    在本文中,我们将深入探讨如何在Eclipse集成开发环境中,结合MinGW编译器来构建Java JNI(Java Native Interface)项目。JNI是Java平台的一部分,它允许Java代码和其他语言写的代码进行交互,使得开发者可以利用C/...

    Eclipse Android NDK JNI 详细开发流程

    ### Eclipse Android NDK JNI 详细开发流程 #### 一、前言 在进行Android应用开发时,有时我们需要利用原生代码(通常是C/C++)来提高应用性能或访问某些特定硬件资源,这时就需要用到NDK(Native Development Kit...

    使用eclipse单步调试jni代码(方法1)

    标题中的“使用eclipse单步调试jni代码(方法1)”是指使用Eclipse集成开发环境进行JNI(Java Native Interface)代码的调试,这是Android应用开发中处理C或C++原生代码的一种方式。JNI允许Java代码调用本地库,通常...

    eclipse使用jni的简单实例

    总结,这个实例展示了如何在Eclipse中使用JNI来实现Java与C之间的通信,包括创建Java项目、生成JNI头文件、编写C代码、编译C代码以及测试整个流程。通过这种方式,开发者可以在Java应用中充分利用C/C++库的功能,...

    JNI开发 eclipse相关开发环境的搭建

    本文将指导读者如何在 Eclipse 中搭建 JNI 开发环境,并使用 CDT 插件进行 C/C++ 代码的编写和编译。 环境搭建 1. 安装 CDT 插件 CDT(C/C++ Development Tooling)是 Eclipse 中的 C/C++ 开发插件。可以从官方...

    基于C++的Jni防盗设计源码

    本设计源码提供了一个基于C++的Jni防盗解决方案,包含48个文件,其中包括17个xml配置文件,10张png图片,4个gradle文件,3个gitignore文件,3个java源文件,2个pro项目文件,2个properties配置文件,以及1个txt文本...

    Eclipse JNI Demo

    总结起来,【Eclipse JNI Demo】项目是一个典型的Android JNI开发示例,涵盖了从Java到C/C++的交互过程,展示了如何在Eclipse环境中配置和使用JNI来提升Android应用的性能和功能。这个项目对于学习和理解JNI技术具有...

    C/C++在进行jni开发时的区别

    JNI在C/C++与Java之间的桥梁作用使得开发者能够利用C或C++的高效性能来实现Java难以或者无法高效完成的任务。这篇讨论将深入探讨C和C++在JNI开发中的异同。 一、C语言在JNI开发中的应用 1. 语法差异:C语言是一种...

    Android JNI 断点调试C++

    在Android开发中,JNI(Java Native Interface)是一个关键的组件,允许Java代码调用本地(C/C++)代码,反之亦然。这对于性能敏感的应用、底层库的集成以及利用现有C/C++库是非常有用的。本教程将聚焦于如何在...

    MyJNI.rar_C++ JNI_jni

    JNI是Java平台提供的一种接口,允许Java代码和其他语言(如C++)编写的代码进行交互。它为Java开发者提供了一种方式,让他们可以利用现有的C/C++库或者实现那些在Java中难以高效执行的任务,比如硬件访问、图形加速...

    Qt for Android 用JNI来使C++和Java互调(目前最新版全网只有这个可用)

    在Qt for Android中,我们可以通过JNI来调用C++编写的Qt函数,或者在C++代码中调用Android的API,实现对设备硬件和特定平台功能的访问。 在使用JNI的过程中,有以下几个关键步骤: 1. **创建JNI头文件**:使用...

    使用eclipse单步调试jni代码 (方法2)

    ### 使用Eclipse单步调试JNI代码(方法2) #### 环境配置 为了能够有效地进行JNI代码的调试,首先需要确保以下环境已正确配置: - **ADT Bundle**: Eclipse版本为Juno - **NDK**: 版本r9 - **JDK**: 版本8 - **...

    Java通过JNI调用Eclipse、MinGW编译C++出来的dll

    Java通过JNI调用Eclipse、MinGW编译C++出来的dll,仅仅是一个简单的示例,关键是整个流程要走通,详细参见:http://blog.csdn.net/yanzi1225627/article/details/18891613

Global site tag (gtag.js) - Google Analytics