zoukankan      html  css  js  c++  java
  • “undefined JNI_GetCreatedJavaVM”和“File format not recognized”错误原因分析

    如果编译时,报如下所示错误:
    ../../third-party/hadoop/lib/libhdfs.a(jni_helper.c.o): In function `getGlobalJNIEnv':
    /root/hadoop-2.4.0-src/hadoop-hdfs-project/hadoop-hdfs/src/main/native/libhdfs/jni_helper.c:446: undefined reference to `JNI_GetCreatedJavaVMs'
    /root/hadoop-2.4.0-src/hadoop-hdfs-project/hadoop-hdfs/src/main/native/libhdfs/jni_helper.c:505: undefined reference to `JNI_CreateJavaVM'
    /root/hadoop-2.4.0-src/hadoop-hdfs-project/hadoop-hdfs/src/main/native/libhdfs/jni_helper.c:505: undefined reference to `JNI_CreateJavaVM'


    是因为链接时,没有加上库文件libjvm.so。加上libjvm.so重编译,如果又遇到如下所示的错误:
    ../../third-party/libjvm.so: file not recognized: File format not recognized


    这问题是因为libjvm.so不能被识别,libjvm.so的版本过高导致的
    nm ../../third-party/libjvm.so | grep JNI_CreateJavaVM
    nm: ../../third-party/libjvm.so: 不可识别的文件格式


    查看nm的版本:
    nm --version
    GNU nm 2.16.91.0.5 20051219 (SUSE Linux)
    Copyright 2005 Free Software Foundation, Inc.
    本程序是自由软件;您可以按照 GNU 通用公共许可证
    的条款对其进行再发行。本程序没有任何担保。


    现在换成高一点的版本试试:
    ./nm --version
    GNU nm 2.17.50.0.6-20.el5 20061020
    Copyright 2005 Free Software Foundation, Inc.
    This program is free software; you may redistribute it under the terms of
    the GNU General Public License.  This program has absolutely no warranty.


    再次执行,一切正常,需要升级ld​了,或者降低JRE或JDK的版本试试:
    ./nm libjvm.so | grep JNI_CreateJavaVM
    00000000006307c0 T JNI_CreateJavaVM

    实际应用中,编译虽然存在此问题,但运行时,可以使用更高版本的libjvm.so。

    ld下载地址:http://ftp.gnu.org/gnu/binutils/(ld和nm均是GNU binutils的成员之一)。
  • 相关阅读:
    1209.3——选择排序算法
    1209.2——直接插入排序算法
    1209.1——快速排序算法
    1208.1——猜数字小游戏
    1207.1——C语言 函数
    1207--ATM自动取款机的实现
    Mac搭建本地svn服务器,并用Cornerstone连接服务器
    iOS textField 和textView的一些用法
    iOS button 文字图片上下/左右排布
    iOS 代理的具体使用
  • 原文地址:https://www.cnblogs.com/aquester/p/9891560.html
Copyright © 2011-2022 走看看