0
我编写了一个Java类,它通过Jni访问C dll中的方法。使用JNI的未经认证的链接器错误
但我在Windows中得到以下错误。
java.lang.UnsatisfiedLinkError: Server.getNetworkDiagram(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;
猜测它能够加载库。
另外我从一组常用C文件构建.dll(对于windows)和.so(对于linux) 这适用于.so文件,我不会收到任何错误。
你能帮我一下吗?
如何在此处进行调试?
感谢, 苏达
不能确定它是否是拼错,因为它工作在Linux操作系统。
下面是头文件和Java文件。
========
JNI文件
/* DO NOT EDIT THIS FILE - it is machine generated */
#include <jni.h>
/* Header for class Server */
#ifndef _Included_Server
#define _Included_Server
#ifdef __cplusplus
extern "C" {
#endif
#undef Server_GETNETWORK
#define Server_GETNETWORK 1L
#undef Server_SETLEVEL
#define Server_SETLEVEL 2L
/*
* Class: Server
* Method: getNetworkDiagram
* Signature: (Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;
*/
JNIEXPORT jstring JNICALL Java_Server_getNetworkDiagram
(JNIEnv *, jobject, jstring, jstring, jstring);
/*
* Class: Server
* Method: setLevelQuery
* Signature: (Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;IILjava/lang/String;)Z
*/
JNIEXPORT jboolean JNICALL Java_Server_setLevelQuery
(JNIEnv *, jobject, jstring, jstring, jstring, jint, jint, jstring);
#ifdef __cplusplus
}
#endif
#endif
=========
Java File
=========
public class Server
{
public native String getNetworkDiagram(String domain, String dest, String secret);
public void test()
{
String domain = "domain1";
String host = "2.2.2.30";
String secret = "test";
System.loadLibrary("libewapi");
String result = this.getNetworkDiagram(domain, host, secret);
}
public static void main(String argv[]) throws Exception
{
Server server = new Server();
server.test();
}
}
无法在此处粘贴整个文件。我已在主要帖子中进行了编辑。 感谢您的帮助 – user397348 2010-07-21 01:19:39
一切似乎都没有问题,您可能会得到两个原因的异常: 1.-无法找到DLL文件?它在应用程序根目录中吗? 2.-在C代码文件本身中包含C头文件,您还需要它用于方法定义和C关键字定义。 有时编译器可能会更改方法名称(符号),您可以将库分解以查看符号表,查看是否有任何更改。 你用什么环境在windows上构建库? – jgemedina 2010-07-21 05:52:34
是的。我正在使用Windows 7,我已经将DLL放在C:\ Windows \ SysWOW64目录中 猜测它能够找到并加载DLL。 我试图使用依赖关系walker来反汇编dll。函数名称是相同的。 唯一的问题,我看到它是说,有两个DLL的失踪。它们是GPSVC.dll和IESHIMS.dll 我们使用交叉编译器从Linux机器构建DLL。 这是一个i386-ming编译器。 – user397348 2010-07-21 06:45:36