Java JNI符号查找错误
Java JNI symbol lookup error
首先,我是JNI的新手。我有一个导入本机函数的java类,下面是Java
代码:
public static native byte[] sha512(byte[] message);
static {
System.loadLibrary("sha512");
}
当我尝试用java调用函数时,我得到了以下错误:
java: symbol lookup error: /home/kgb/IdeaProjects/JavaCiphersLib/out/production/JavaCiphersLib/libsha512.so: undefined symbol: _Znam
以下是使用javah
:生成的C++
头文件
/* DO NOT EDIT THIS FILE - it is machine generated */
#include <jni.h>
/* Header for class my_SHA512 */
#ifndef _Included_my_SHA512
#define _Included_my_SHA512
#ifdef __cplusplus
extern "C" {
#endif
/*
* Class: my_SHA512
* Method: sha512
* Signature: ([B)[B
*/
JNIEXPORT jbyteArray JNICALL Java_my_SHA512_sha512
(JNIEnv *, jclass, jbyteArray);
#ifdef __cplusplus
}
#endif
#endif
这里的实现:
#include <jni.h>
#include "my_SHA512.h"
#include <stdio.h>
#include <stdlib.h>
#ifdef __cplusplus
extern "C" {
#endif
JNIEXPORT jbyteArray JNICALL Java_my_SHA512_sha512(JNIEnv* env, jclass _class, jbyteArray message)
{
unsigned char* msg = new unsigned char[5];
delete msg;
printf("Test Test Testn");
return message;
}
#ifdef __cplusplus
}
#endif
现在,如果我删除unsigned char* msg = new unsigned char[5];
行,错误就消失了。以下是c++filt
所说的:
kgb@KGB-PC:~$ c++filt -n _Znam
operator new[](unsigned long)
以下是我如何编译c++代码:
gcc -I$JAVA_INC_PATH -I$JAVA_INC_PATH./linux -fPIC -c my_SHA512Impl.cpp
gcc -shared -Wl,-soname,libsha512.so.2 -o libsha512.so.2.0 my_SHA512Impl.o
那么我该如何摆脱这个错误呢?如果你能解释一下所有的c++魔法是如何工作的,以及如何在未来避免这些错误,那就太好了
提前谢谢。
UPD不知道它有用,但这里是ldd libsha512.so
输出:
linux-vdso.so.1 => (0x00007ffd29171000)
libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f0e1cd86000)
/lib64/ld-linux-x86-64.so.2 (0x00007f0e1d34d000)
有时简单地使用g++而不是gcc会有所帮助,因为它在默认情况下添加了C++运行库。
相关文章:
- 查找显示链表时出现的错误
- enable_if继承的成员函数的名称查找错误
- 用于查找数组中最大元素的出现次数的代码,给出分段错误
- 使用 c++ 查找 lapindromes 时运行时错误"SIGCONT"
- 旧C++代码中的目录查找导致 OS X Catalina 10.15 中的目录错误
- 尝试查找两组点的交集,错误"No viable overloaded '=' "
- 在尝试使用递归查找集合子集的总数时,我遇到了分割错误
- 查找素数:错误:控件到达非void函数的末尾
- DEV C++ 第 69 行 [错误] ISO "for" 范围更改了"i"的名称查找 [-允许]
- 与Qt交叉编译到Raspberry Pi 3B+通讯录(协议缓冲区)-错误符号查找错误
- 如何修复错误:使用向量查找最小值和最大值进行合并排序
- 需要一些帮助来查找我的程序中的逻辑错误
- OpenCV CV 查找单应断言错误计数器 = > 4
- 我的代码似乎在查找最大数字时存在语法错误
- 在编写代码以查找数组中的对数时获取分段错误
- 符号查找错误未定义的符号:curl_mime_init
- 从模板实例化/类型推断中查找错误消息的实际来源
- 质数查找器运行时错误
- 我在代码中收到一个运行时错误,该错误如何通过修改最多一个元素来查找数组是否可以变得不减少
- 分段错误 - 查找列表的根