`
liss
  • 浏览: 842759 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

JNI 与 GCC 的 UnsatisfiedLinkError 问题解決了

阅读更多

这几天因工作需要, 第一次测试 JNI 程序的撰写.
依范例写的程序, 看来没什么问题, gcc compile/link 也没报错.
可是一跑 Java 程序, 就一直报错:
Exception in thread "main" java.lang.UnsatisfiedLinkError: myPac/MyClass.myfunc(I)V
在 Google 上找到第1篇文章:
Java Native Interface (JNI) - JNI with GCC
http://forum.java.sun.com/thread.jspa?threadID=470937&messageID=2414695
依照里面的说明, 从头到尾检查了 .java .h .c 等程序, 并没发现自己有做错什么步骤,
但 Java 程序就是一直报 UnsatisfiedLinkError 的错误.
今天一早来, 又用 Google 找了一次, 找到第2篇文章:
Java Native Interface (JNI) - Creating JNI DLL on WinXP using MinGW and G
http://forum.java.sun.com/thread.jspa?threadID=5200233
发现自己是猪头, 哈哈!
原因是:
自己对 gcc 并不懂, 在前一天依据第一篇文章检查时,
自以为是的把自己认为并不重要的步骤省略了.
在第2篇文章中特别强调我所漏掉的步骤就是关键, 一定得做的 (详细说明请参考上列第2篇文章).
也就是在 gcc link 时, 需要加上 "-Wl,--add-stdcall-alias" 参数,
否则产生出来的 lib reference 会无法被正确呼叫到.
加上这个参数, 问题就解决了, 真幸运!
以上的问题是发生在 Win32 平台上;
Linux/UNIX 是不是也有相同问题, 等有机会遇到时, 再来测吧.

http://topatis.blog.ithome.com.tw/post/613/17245

分享到:
评论

相关推荐

    编译JNI的gcc指令代打和测试例程

    使用gcc和g++编译jni指令太长,很麻烦。所以做了一个编译工具JNIBuilder.jar。 因为是用于jni的,所以默认使用者的电脑上已经安装好Java和MinGW,并且可用。 并提供一个测试例程。功能是jni函数调用java函数弹出一个...

    JNI笔记(GCC4.4.0编译器)

    总结,JNI是Java与本地代码交互的重要桥梁,GCC作为C/C++的编译器,可以很好地配合Java开发JNI程序。在使用GCC 4.4.0进行JNI编程时,要理解其编译过程,正确配置头文件路径,生成并链接合适的动态库,以便在Java程序...

    gcc makeFile入门(三)JNI.rar

    这个过程涉及到JNI(Java Native Interface),它允许Java代码与用其他编程语言(如C或C++)编写的代码进行交互。 首先,我们需要了解Cygwin。Cygwin是一个提供Linux-like环境的软件集合,可在Windows操作系统上...

    使用JNA替代JNI调用DLL,并解决内存溢出问题

    ### 使用JNA替代JNI调用DLL,并解决内存溢出问题 #### 问题背景 在项目的开发过程中,常常遇到需要处理二进制流数据并对其进行解析处理的情况。这种情况下,如果上层应用平台采用的是Java开发,而底层算法或数据...

    (最终解决)java.lang.UnsatisfiedLinkError解决尝试

    有时,升级或降级库版本可以解决问题。 在提供的`build-local.mk_setpath`文件中,可能包含了构建过程中的路径设置。这通常是在编译和链接本地库时使用的Makefile,用于指定编译器选项、库路径等。打开这个文件,...

    使用JNI调用本地接口(解决中文字符传递,源码+说明)

    3. 处理中文字符在Java与C/C++之间的传递,包括编码转换和线程安全问题。 4. Java中加载和调用本地库的方法。 5. 示例代码和文档,帮助读者实践和理解整个过程。 通过这个教程,你可以掌握使用JNI调用本地接口并...

    jni.zip jni编译jni下载

    JNI在很多场景下非常有用,比如当需要利用已有的C或C++库,或者提升性能时,我们可以通过JNI将Java代码与本地代码集成。 在描述中提到的`jni.h`和`jni_md.h`是JNI编程中必不可少的头文件。`jni.h`包含了JNI接口的...

    使用JNI调用本地接口(解决中文问题)

    JNI是Java平台提供的一种机制,允许Java代码与用其他语言(如C或C++)编写的代码进行交互,从而实现性能优化或者调用特定平台的功能。 首先,我们需要创建一个Java类,声明native方法并定义调用本地接口的逻辑。...

    jni需要注意的常见问题

    ### jni需要注意的常见问题 #### 一、输入问题 ...通过以上步骤,可以有效地解决在使用 JNI 进行开发过程中遇到的一些常见问题。这些解决方案不仅可以帮助开发者避免编译错误,还能提高代码质量和可维护性。

    JAVAjni UTF-8版,解决中午乱码问题

    JAVAjni,使用JAVA操作INI增删改查文件,UTF-8版,解决中文乱码问题

    DELPHI开发JNI必备 jni.pas

    总结来说,`jni.pas`和`JNI_MD.INC`是Delphi开发者使用JNI的关键组件,它们使得Delphi程序能够无缝地与Java世界交互,扩大了Delphi的应用范围,特别是在需要与已有的Java系统集成或者利用特定平台原生功能时。...

    解决JNI中文乱码

    解决JNI中文乱码,

    安卓JNI与底层开发项目视频与

    教程名称:安卓JNI与底层开发项目视频与源码课程目录:【】安卓JNI-day01源码与资料【】安卓JNI-day01视频【】安卓JNI-day02源码与资料【】安卓JNI-day02视频【】安卓JNI-day03源码与资料【】安卓JNI-day03视频 ...

    Jni应用个人详解

    1. 找不到jni.h文件:该问题可以通过将jdk的bin目录和include目录添加到编译环境中来解决。 2. 动态链接库加载失败:该问题可以通过检查动态链接库的路径和名称来解决。 Jni是一种powerful技术,allowing Java程序...

    JNI的两个头文件jni.h和jni_md.h

    总结来说,`jni.h`和`jni_md.h`是JNI的核心组成部分,它们使得Java代码能够与C/C++等本地代码无缝交互。开发者通过理解和应用这两个头文件提供的接口,可以实现Java和本地代码的高效集成,满足各种复杂需求。在实际...

    jni层内存泄漏检测工具

    JNI层内存泄漏检测工具是针对Android应用开发中的一个重要问题——JNI内存泄漏的解决方案。JNI,全称为Java Native Interface,允许Java代码与其他编程语言(如C++)交互,从而利用其性能优势。然而,由于Java和C/...

    jni.h头文件

    JNI(Java Native Interface)是Java平台的一个重要组成部分,它提供了在Java代码中调用本地(非Java)代码的能力,...同时,`jni_md.h`的使用则涉及到跨平台开发,理解其作用可以帮助解决在不同操作系统上遇到的问题。

    JNI程序员指南与规范_liono8x_jni指南_

    2. **JNI环境设置**:在使用JNI前,开发者需要配置开发环境,包括安装Java SDK、设置JAVA_HOME环境变量,以及安装C/C++编译器,如GCC或Visual Studio。 3. **编写JNI头文件**:使用`javah`工具,根据Java类中的...

    JNI编程指南与规范.zip

    JNI程序员指南与规范.pdf + 06 JNI编程指南.pdf NDK开发汇总 https://blog.csdn.net/baopengjian/article/details/104615972 THIS book covers the Java™ Native Interface (JNI). It will be useful to you if ...

Global site tag (gtag.js) - Google Analytics