无法在Windows中加载Mac OS X动态库.dylib。线程“main”中的异常java.lang.UnsatisfiedLinkError:找不到依赖库

时间:2014-02-05 12:20:07

标签: xcode eclipse macos java-native-interface dylib

我已经在Mac OS X中使用XCode创建了一个动态库(.dylib),其中包含JNI(Java Native Interface)头文件和c源文件HelloWorld.h和HelloWorld.c.JDK版本为1.7.0_51。我已将“/Library/Java/JavaVirtualMachines/jdk1.7.0.51.jdk/Contents/Home/include”中的“include”文件夹复制到XCode项目中。我构建了创建“libJNIToCDynamic.dylib”的项目。关于JNI的使用,我关注了博客“http://solutions.weblite.ca/tutorials/jni_osx/”。

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

#ifndef _Included_HelloWorld
#define _Included_HelloWorld
#ifdef __cplusplus
extern "C" {
#endif
/*
 * Class:     HelloWorld
 * Method:    print
 * Signature: ()V
 */
JNIEXPORT void JNICALL Java_HelloWorld_print
  (JNIEnv *, jobject);

#ifdef __cplusplus
}
#endif
#endif

HelloWorld.c
#include <jni.h>
#include <stdio.h>
#include "HelloWorld.h"

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

我已经编写了以下Java代码,以便在Mac OS X中使用Eclipse加载.dylib库。以下是加载库的代码: -

class HelloWorld {

        static {
            System.load("/Users/veerendra/Downloads/libJNIToCDynamic.dylib");
        }

        private native void print();

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

然后我生成了HelloWorld.class并将.class和.dylib放在一个文件夹中。在终端中,我成功运行了HelloWorld.class并在控制台“Hello World!using JNI”中打印。 Java在Mac OS X中运行正常,没有错误。

后来,我尝试使用带有路径System.load(“F:\ Android \ DependentLibraries \ libJNIToCDynamic.dylib”)的Eclipse工具运行java以在Windows中加载相同的库“.dylib”,并且出现以下错误: - < / p>

线程“main”中的异常java.lang.UnsatisfiedLinkError:F:\ Android \ DependentLibraries \ libJNIToCDynamic.dylib:找不到依赖库        at java.lang.ClassLoader $ NativeLibrary.load(Native Method)        at java.lang.ClassLoader.loadLibrary1(Unknown Source)        at java.lang.ClassLoader.loadLibrary0(Unknown Source)        at java.lang.ClassLoader.loadLibrary(Unknown Source)        在java.lang.Runtime.load0(未知来源)        在java.lang.System.load(未知来源)        在HelloWorld。(HelloWorld.java:9)

在Mac OS X中生成的动态库.dylib在Mac中成功加载但在尝试加载Windows中的.dylib时不会引发错误。

运行otool的依赖库: - Veerendras-MacBook:~veerendra $ otool -L /Users/veerendra/Downloads/libJNIToCDynamic.dylib /Users/veerendra/Downloads/libJNIToCDynamic.dylib: /usr/local/lib/libJNIToCDynamic.dylib(兼容版本1.0.0,当前版本1.0.0) /System/Library/Frameworks/Foundation.framework/Versions/C/Foundation(兼容版本300.0.0,当前版本945.11.0) /usr/lib/libobjc.A.dylib(兼容版本1.0.0,当前版本228.0.0) /usr/lib/libSystem.B.dylib(兼容版本1.0.0,当前版本169.3.0)

0 个答案:

没有答案