java.lang.UnsatisfiedLinkError: ctest.test.decrypt([BLjava/lang/String;)([B

ouchuquan 2014-05-12 05:02:51
错误:
Exception in thread "main" java.lang.UnsatisfiedLinkError: ctest.test.decrypt([BLjava/lang/String;)[B
at ctest.test.decrypt(Native Method)
at ctest.test.main(test.java:34)

我在做jni的demo的时候出现以上错误


java代码:
package ctest;

import java.io.File;


/**
* <p>Title: </p>
*
* <p>Description: </p>
*
* <p>Copyright: Copyright (c) 2013</p>
*
* <p>Company: </p>
*
* @author not attributable
* @version 1.0
*/
public class test {


public test() {
}

static {

// System.loadLibrary("encrypt");

System.load("D:"+File.separator+"java开发"+File.separator+"wordspace"+File.separator+"ccWorkTools"+File.separator+"classes"+File.separator+"test.dll");

}

public static void main(String args[]) {

decrypt(new byte[10],"string");
}


public static native byte[] decrypt(byte[] encryptData,String password);

}


c++代码
#include <windows.h>
#include "test.h"
#include "jni.h"
#include <string>

JNIEXPORT jbyteArray JNICALL Java_ctest_test_decrypt
(JNIEnv *env, jclass s, jbyteArray byteArr, jstring str){
byte pData[] = {0x01, 0x01, 0x02, 0xe4, 0x71, 0x2b, 0x5f, 0x30};
jbyte *by = (jbyte*)pData;
int nOutSize = sizeof(pData);
jbyteArray jarray = env->NewByteArray(nOutSize);
env->SetByteArrayRegion(jarray, 0, nOutSize, by);


const char *nativeString = env->GetStringUTFChars(str, 0);
printf("%s", nativeString);

return jarray;
}

BOOL WINAPI DllMain(HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpvReserved)
{

switch (fdwReason)
{
case DLL_PROCESS_ATTACH:
// attach to process
// return FALSE to fail DLL load
break;

case DLL_PROCESS_DETACH:
// detach from process
break;

case DLL_THREAD_ATTACH:
// attach to thread
break;

case DLL_THREAD_DETACH:
// detach from thread
break;
}
return TRUE; // succesful
}

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

#ifndef _Included_ctest_test
#define _Included_ctest_test
#ifdef __cplusplus
extern "C" {
#endif
/*
* Class: ctest_test
* Method: decrypt
* Signature: ([BLjava/lang/String;)[B
*/
JNIEXPORT jbyteArray JNICALL Java_ctest_test_decrypt

(JNIEnv *, jclass, jbyteArray, jstring);

#ifdef __cplusplus
}
#endif
#endif


恳求前辈们指点一下,不知道是在哪里出错了 网上搜索了很多 还是没能解决 。 估计跟java方法签名有关,因为在网上查说是这样子,但是我核对了,找不出原因

我用的ide是code block 编译器是gnu gcc
在线等
...全文
3467 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
code_fan一枚 2014-11-20
  • 打赏
  • 举报
回复
也遇到这个问题,但是,我写了两个java工程,一个可以调用成功,在另一个调用就报这个错误,不懂啥原因。。。
nergal_ 2014-09-29
  • 打赏
  • 举报
回复
NDK下面的 C++代码 无法被JAVA识别: 执行的过程中报错: C++ 的代码里面必须先声明: extern "C"{ JNIEXPORT jbyteArray JNICALL Java_ctest_test_decrypt (JNIEnv *env, jclass s, jbyteArray byteArr, jstring str); }; 这是因为生成的二进制文件中,C和C++的符号表不相同造成的。Jni是按照C的生成规则去找函数的, 所以要加上extern C使编译器把函数按照C的规则编译 这样才能被JAVA调用
ouchuquan 2014-05-13
  • 打赏
  • 举报
回复
引用 6 楼 rui888 的回复:
参考这个。
这帖子也是关于jni问题的,可惜他的是找不到dll出错,我这里应该属于找不到方法类型的
tony4geek 2014-05-13
  • 打赏
  • 举报
回复
teemai 2014-05-13
  • 打赏
  • 举报
回复
动态库能跑,用个软件看下。我记得有个什么creater的。 以前用过,好久没玩忘了
ouchuquan 2014-05-13
  • 打赏
  • 举报
回复
另外2个demo与以上代码大致类似,一个报错: Exception in thread "main" java.lang.UnsatisfiedLinkError: ctest.GoodLuck.getString()Ljava/lang/String; at ctest.GoodLuck.getString(Native Method) at ctest.GoodLuck.main(GoodLuck.java:37) 另一个报错: Exception in thread "main" java.lang.UnsatisfiedLinkError: ctest.HelloJni.displayHelloJni()V at ctest.HelloJni.displayHelloJni(Native Method) at ctest.HelloJni.main(HelloJni.java:27) 报错大概相同,应该属于同一错误,其实我之前GoodLuck这个demo能跑起来的,可是后来好像改了c++的编译器就不能跑了,可惜后来尝试更改编译器就是不成功,只怪粗心大意把能跑的demo给修改了。我现在有能跑的动态库文件 可惜不懂反编译出来看。
ouchuquan 2014-05-13
  • 打赏
  • 举报
回复
自己顶一下,会的大神请指点下小弟,做了一天弄不出来,没办法耶
ouchuquan 2014-05-12
  • 打赏
  • 举报
回复
引用 1 楼 fangmingshijie 的回复:
应该是参数类型错误。
不晓得 不知道从何入手测试
  • 打赏
  • 举报
回复
应该是参数类型错误。

50,526

社区成员

发帖
与我相关
我的任务
社区描述
Java相关技术讨论
javaspring bootspring cloud 技术论坛(原bbs)
社区管理员
  • Java相关社区
  • 小虚竹
  • 谙忆
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧