java程序通过JNI调用第三方so文件,运行出现crash,导致程序退出 80C

在spring boot中使用JNI集成第三方so文件,通过
java -XX:+UnlockDiagnosticVMOptions -XX:+VerifyBeforeGC -XX:+VerifyAfterGC -jar xxxxx.jar运行,在调用第三方so文件时出现crash,导致程序退出
图片说明
下面是crash产生的日志文件hs_err_pid17314.log

 #
# A fatal error has been detected by the Java Runtime Environment:
#
#  Internal Error (instanceKlass.cpp:3358), pid=17314, tid=0x00007ff1fe6e6700
#  guarantee(false) failed: boom
#
# JRE version: Java(TM) SE Runtime Environment (8.0_111-b14) (build 1.8.0_111-b14)
# Java VM: Java HotSpot(TM) 64-Bit Server VM (25.111-b14 compiled mode linux-amd64 compressed oops)
# Core dump written. Default location: /data/html/agora/core or core.17314
#
# If you would like to submit a bug report, please visit:
#   http://bugreport.java.com/bugreport/crash.jsp
#

---------------  T H R E A D  ---------------

Current thread (0x00007ff22c1c6000):  VMThread [stack: 0x00007ff1fe5e6000,0x00007ff1fe6e7000] [id=17324]

Stack: [0x00007ff1fe5e6000,0x00007ff1fe6e7000],  sp=0x00007ff1fe6e5200,  free space=1020k
Native frames: (J=compiled Java code, j=interpreted, Vv=VM code, C=native code)
V  [libjvm.so+0xac5c2a]  VMError::report_and_die()+0x2ba
V  [libjvm.so+0x4fbc92]  report_vm_error(char const*, int, char const*, char const*)+0x62
V  [libjvm.so+0x655582]  VerifyFieldClosure::do_oop(unsigned int*)+0x102
V  [libjvm.so+0x64b651]  InstanceKlass::oop_oop_iterate_nv(oopDesc*, NoHeaderExtendedOopClosure*)+0x91
V  [libjvm.so+0x63ea8f]  InstanceKlass::oop_verify_on(oopDesc*, outputStream*)+0x5f
V  [libjvm.so+0x8dd059]  MutableSpace::verify()+0x69
V  [libjvm.so+0x992486]  PSYoungGen::verify()+0x16
V  [libjvm.so+0xa8cf6c]  Universe::verify(VerifyOption, char const*, bool)+0xcc
V  [libjvm.so+0x98e6f0]  PSScavenge::invoke_no_policy()+0x330
V  [libjvm.so+0x98fa81]  PSScavenge::invoke()+0x41
V  [libjvm.so+0x9467d0]  ParallelScavengeHeap::failed_mem_allocate(unsigned long)+0x70
V  [libjvm.so+0xac7647]  VM_ParallelGCFailedAllocation::doit()+0x97
V  [libjvm.so+0xacf125]  VM_Operation::evaluate()+0x55
V  [libjvm.so+0xacd4fa]  VMThread::evaluate_operation(VM_Operation*)+0xba
V  [libjvm.so+0xacd87e]  VMThread::loop()+0x1ce
V  [libjvm.so+0xacdcf0]  VMThread::run()+0x70
V  [libjvm.so+0x924ea8]  java_start(Thread*)+0x108

VM_Operation (0x00007ff1753d7780): ParallelGCFailedAllocation, mode: safepoint, requested by thread 0x00007ff128001000

8个回答

 ---------------  P R O C E S S  ---------------

Java Threads: ( => current thread )
  0x00007ff1300d7800 JavaThread "I/O dispatcher 32" [_thread_in_native, id=17603, stack(0x00007ff0ffbfc000,0x00007ff0ffcfd000)]
  0x00007ff1300d5800 JavaThread "I/O dispatcher 31" [_thread_in_native, id=17602, stack(0x00007ff0ffcfd000,0x00007ff0ffdfe000)]
  0x00007ff1300d3800 JavaThread "I/O dispatcher 30" [_thread_in_native, id=17601, stack(0x00007ff0ffdfe000,0x00007ff0ffeff000)]
  0x00007ff1300d1800 JavaThread "I/O dispatcher 29" [_thread_in_native, id=17600, stack(0x00007ff0ffeff000,0x00007ff100000000)]
  0x00007ff1300cf800 JavaThread "I/O dispatcher 28" [_thread_in_native, id=17599, stack(0x00007ff1740d4000,0x00007ff1741d5000)]
  0x00007ff1300ce000 JavaThread "I/O dispatcher 27" [_thread_in_native, id=17598, stack(0x00007ff1741d5000,0x00007ff1742d6000)]
  0x00007ff1300cc000 JavaThread "I/O dispatcher 26" [_thread_in_native, id=17597, stack(0x00007ff1742d6000,0x00007ff1743d7000)]
  0x00007ff1300ca800 JavaThread "I/O dispatcher 25" [_thread_in_native, id=17596, stack(0x00007ff1743d7000,0x00007ff1744d8000)]
  0x00007ff1282f0000 JavaThread "Thread-12" daemon [_thread_blocked, id=17595, stack(0x00007ff1744d8000,0x00007ff1745d9000)]
  0x00007ff1282ef800 JavaThread "pool-8-thread-1" [_thread_in_native, id=17594, stack(0x00007ff1745d9000,0x00007ff1746da000)]
  0x00007ff128004000 JavaThread "process reaper" daemon [_thread_blocked, id=17500, stack(0x00007ff21c02b000,0x00007ff21c064000)]
  0x00007ff128001000 JavaThread "Thread-11" [_thread_blocked, id=17489, stack(0x00007ff1749db000,0x00007ff1753dc000)]
  0x00007ff158004800 JavaThread "pool-2-thread-2" [_thread_in_native, id=17467, stack(0x00007ff1746da000,0x00007ff1747db000)]
  0x00007ff164a34000 JavaThread "pool-2-thread-1" [_thread_blocked, id=17411, stack(0x00007ff1753dc000,0x00007ff1754dd000)]
  0x00007ff10c0d5800 JavaThread "I/O dispatcher 24" [_thread_in_native, id=17410, stack(0x00007ff1754dd000,0x00007ff1755de000)]
  0x00007ff10c0d4000 JavaThread "I/O dispatcher 23" [_thread_in_native, id=17409, stack(0x00007ff1755de000,0x00007ff1756df000)]
  0x00007ff10c0d2000 JavaThread "I/O dispatcher 22" [_thread_in_native, id=17408, stack(0x00007ff1756df000,0x00007ff1757e0000)]
  0x00007ff10c0d0000 JavaThread "I/O dispatcher 21" [_thread_in_native, id=17407, stack(0x00007ff1757e0000,0x00007ff1758e1000)]
  0x00007ff10c0ce800 JavaThread "I/O dispatcher 20" [_thread_in_native, id=17406, stack(0x00007ff1758e1000,0x00007ff1759e2000)]
  0x00007ff10c0cc800 JavaThread "I/O dispatcher 19" [_thread_in_native, id=17405, stack(0x00007ff1759e2000,0x00007ff175ae3000)]
  0x00007ff10c0cb000 JavaThread "I/O dispatcher 18" [_thread_in_native, id=17404, stack(0x00007ff175ae3000,0x00007ff175be4000)]
  0x00007ff10c0c9000 JavaThread "I/O dispatcher 17" [_thread_in_native, id=17403, stack(0x00007ff175be4000,0x00007ff175ce5000)]
  0x00007ff164975000 JavaThread "Thread-9" daemon [_thread_blocked, id=17402, stack(0x00007ff175ce5000,0x00007ff175de6000)]
  0x00007ff164974000 JavaThread "pool-7-thread-1" [_thread_in_native, id=17401, stack(0x00007ff175de6000,0x00007ff175ee7000)]
  0x00007ff22c008800 JavaThread "DestroyJavaVM" [_thread_blocked, id=17315, stack(0x00007ff235bea000,0x00007ff235ceb000)]
  0x00007ff22d723800 JavaThread "Thread-8" [_thread_blocked, id=17387, stack(0x00007ff1760e7000,0x00007ff1761e8000)]
  0x00007ff22ce20000 JavaThread "grpc-default-boss-ELG-1-1" daemon [_thread_in_native, id=17386, stack(0x00007ff1761e8000,0x00007ff1762e9000)]
  0x00007ff13c0d7000 JavaThread "I/O dispatcher 16" [_thread_in_native, id=17385, stack(0x00007ff1766e9000,0x00007ff1767ea000)]
  0x00007ff13c0d5000 JavaThread "I/O dispatcher 15" [_thread_in_native, id=17384, stack(0x00007ff1767ea000,0x00007ff1768eb000)]
  0x00007ff13c0d3800 JavaThread "I/O dispatcher 14" [_thread_in_native, id=17383, stack(0x00007ff1768eb000,0x00007ff1769ec000)]
  0x00007ff13c0d1800 JavaThread "I/O dispatcher 13" [_thread_in_native, id=17382, stack(0x00007ff1769ec000,0x00007ff176aed000)]
  0x00007ff13c0d0000 JavaThread "I/O dispatcher 12" [_thread_in_native, id=17381, stack(0x00007ff176aed000,0x00007ff176bee000)]
  0x00007ff13c0ce000 JavaThread "I/O dispatcher 11" [_thread_in_native, id=17380, stack(0x00007ff176bee000,0x00007ff176cef000)]
  0x00007ff13c0cc000 JavaThread "I/O dispatcher 10" [_thread_in_native, id=17379, stack(0x00007ff176cef000,0x00007ff176df0000)]
  0x00007ff13c001800 JavaThread "I/O dispatcher 9" [_thread_in_native, id=17378, stack(0x00007ff176df0000,0x00007ff176ef1000)]
  0x00007ff18c32a000 JavaThread "Thread-7" daemon [_thread_blocked, id=17377, stack(0x00007ff176ef1000,0x00007ff176ff2000)]
  0x00007ff18c359800 JavaThread "pool-4-thread-1" [_thread_in_native, id=17376, stack(0x00007ff176ff2000,0x00007ff1770f3000)]
  0x00007ff22ca79800 JavaThread "http-nio-50000-AsyncTimeout" daemon [_thread_blocked, id=17375, stack(0x00007ff1770f3000,0x00007ff1771f4000)]
  0x00007ff22ca78000 JavaThread "http-nio-50000-Acceptor-0" daemon [_thread_in_native, id=17374, stack(0x00007ff1771f4000,0x00007ff1772f5000)]
  0x00007ff22de8a800 JavaThread "http-nio-50000-ClientPoller-1" daemon [_thread_in_native, id=17373, stack(0x00007ff1772f5000,0x00007ff1773f6000)]
  0x00007ff22c2b7000 JavaThread "http-nio-50000-ClientPoller-0" daemon [_thread_in_native, id=17372, stack(0x00007ff1773f6000,0x00007ff1774f7000)]
  0x00007ff22e2f8800 JavaThread "http-nio-50000-exec-10" daemon [_thread_blocked, id=17371, stack(0x00007ff1774f7000,0x00007ff1775f8000)]
  0x00007ff22e2f7000 JavaThread "http-nio-50000-exec-9" daemon [_thread_blocked, id=17370, stack(0x00007ff1775f8000,0x00007ff1776f9000)]
  0x00007ff22da0e800 JavaThread "http-nio-50000-exec-8" daemon [_thread_blocked, id=17369, stack(0x00007ff1776f9000,0x00007ff1777fa000)]
  0x00007ff22ce58000 JavaThread "http-nio-50000-exec-7" daemon [_thread_blocked, id=17368, stack(0x00007ff1777fa000,0x00007ff1778fb000)]
  0x00007ff22ccb7000 JavaThread "http-nio-50000-exec-6" daemon [_thread_blocked, id=17367, stack(0x00007ff1778fb000,0x00007ff1779fc000)]
  0x00007ff22d4b9000 JavaThread "http-nio-50000-exec-5" daemon [_thread_blocked, id=17366, stack(0x00007ff1779fc000,0x00007ff177afd000)]
  0x00007ff22e91d000 JavaThread "http-nio-50000-exec-4" daemon [_thread_blocked, id=17365, stack(0x00007ff177afd000,0x00007ff177bfe000)]
  0x00007ff22c9e2000 JavaThread "http-nio-50000-exec-3" daemon [_thread_blocked, id=17364, stack(0x00007ff177bfe000,0x00007ff177cff000)]
  0x00007ff22cc0f800 JavaThread "http-nio-50000-exec-2" daemon [_thread_blocked, id=17363, stack(0x00007ff177cff000,0x00007ff177e00000)]
  0x00007ff22e077000 JavaThread "http-nio-50000-exec-1" daemon [_thread_blocked, id=17362, stack(0x00007ff1b4033000,0x00007ff1b4134000)]
  0x00007ff22cf0e000 JavaThread "NioBlockingSelector.BlockPoller-1" daemon [_thread_in_native, id=17361, stack(0x00007ff1b4a37000,0x00007ff1b4b38000)]
  0x00007ff22d0de800 JavaThread "pool-3-thread-1" [_thread_blocked, id=17360, stack(0x00007ff1b4b38000,0x00007ff1b4c39000)]
  0x00007ff22e750800 JavaThread "commons-pool-EvictionTimer" daemon [_thread_blocked, id=17355, stack(0x00007ff1b4534000,0x00007ff1b4635000)]
  0x00007ff22d70c000 JavaThread "container-0" [_thread_blocked, id=17353, stack(0x00007ff1b4635000,0x00007ff1b4736000)]
  0x00007ff22cf8f000 JavaThread "ContainerBackgroundProcessor[StandardEngine[Tomcat]]" daemon [_thread_blocked, id=17352, stack(0x00007ff1b4736000,0x00007ff1b4837000)]
  0x00007ff1b0c44000 JavaThread "I/O dispatcher 8" [_thread_in_native, id=17349, stack(0x00007ff1d4672000,0x00007ff1d4773000)]
  0x00007ff1b0bd2000 JavaThread "I/O dispatcher 7" [_thread_in_native, id=17348, stack(0x00007ff1d4773000,0x00007ff1d4874000)]
  0x00007ff1b035f000 JavaThread "I/O dispatcher 6" [_thread_in_native, id=17347, stack(0x00007ff1d4874000,0x00007ff1d4975000)]
  0x00007ff1b007c000 JavaThread "I/O dispatcher 5" [_thread_in_native, id=17346, stack(0x00007ff1d4975000,0x00007ff1d4a76000)]
  0x00007ff1b0309800 JavaThread "I/O dispatcher 4" [_thread_in_native, id=17345, stack(0x00007ff1d4a76000,0x00007ff1d4b77000)]
  0x00007ff1b076e000 JavaThread "I/O dispatcher 3" [_thread_in_native, id=17344, stack(0x00007ff1d4b77000,0x00007ff1d4c78000)]
  0x00007ff1b01cc800 JavaThread "I/O dispatcher 2" [_thread_in_native, id=17343, stack(0x00007ff1d4c78000,0x00007ff1d4d79000)]
  0x00007ff1b0d72000 JavaThread "I/O dispatcher 1" [_thread_in_native, id=17342, stack(0x00007ff1d4d79000,0x00007ff1d4e7a000)]
  0x00007ff22e79b000 JavaThread "Thread-2" daemon [_thread_blocked, id=17341, stack(0x00007ff1fc08a000,0x00007ff1fc18b000)]
  0x00007ff22e73a000 JavaThread "pool-1-thread-1" [_thread_in_native, id=17340, stack(0x00007ff1fcd9c000,0x00007ff1fce9d000)]
  0x00007ff22c218000 JavaThread "Service Thread" daemon [_thread_blocked, id=17332, stack(0x00007ff1fddde000,0x00007ff1fdedf000)]
  0x00007ff22c20e000 JavaThread "C1 CompilerThread3" daemon [_thread_blocked, id=17331, stack(0x00007ff1fdedf000,0x00007ff1fdfe0000)]
  0x00007ff22c20c000 JavaThread "C2 CompilerThread2" daemon [_thread_blocked, id=17330, stack(0x00007ff1fdfe0000,0x00007ff1fe0e1000)]
  0x00007ff22c20a000 JavaThread "C2 CompilerThread1" daemon [_thread_blocked, id=17329, stack(0x00007ff1fe0e1000,0x00007ff1fe1e2000)]
  0x00007ff22c207000 JavaThread "C2 CompilerThread0" daemon [_thread_blocked, id=17328, stack(0x00007ff1fe1e2000,0x00007ff1fe2e3000)]
  0x00007ff22c205800 JavaThread "Signal Dispatcher" daemon [_thread_blocked, id=17327, stack(0x00007ff1fe2e3000,0x00007ff1fe3e4000)]
  0x00007ff22c1d2800 JavaThread "Finalizer" daemon [_thread_blocked, id=17326, stack(0x00007ff1fe3e4000,0x00007ff1fe4e5000)]
  0x00007ff22c1ce000 JavaThread "Reference Handler" daemon [_thread_blocked, id=17325, stack(0x00007ff1fe4e5000,0x00007ff1fe5e6000)]

Other Threads:
=>0x00007ff22c1c6000 VMThread [stack: 0x00007ff1fe5e6000,0x00007ff1fe6e7000] [id=17324]
  0x00007ff22c213800 WatcherThread [stack: 0x00007ff1fdcdd000,0x00007ff1fddde000] [id=17333]

VM state:at safepoint (normal execution)

VM Mutex/Monitor currently owned by a thread:  ([mutex/lock_event])
[0x00007ff22c005e50] Threads_lock - owner thread: 0x00007ff22c1c6000
[0x00007ff22c006350] Heap_lock - owner thread: 0x00007ff128001000

Heap:
 PSYoungGen      total 466944K, used 454656K [0x0000000719800000, 0x0000000736d00000, 0x00000007c0000000)
  eden space 454656K, 100% used [0x0000000719800000,0x0000000735400000,0x0000000735400000)
  from space 12288K, 0% used [0x0000000736080000,0x0000000736080000,0x0000000736c80000)
  to   space 12800K, 0% used [0x0000000735400000,0x0000000735400000,0x0000000736080000)
 ParOldGen       total 225280K, used 34933K [0x00000005cc800000, 0x00000005da400000, 0x0000000719800000)
  object space 225280K, 15% used [0x00000005cc800000,0x00000005cea1d580,0x00000005da400000)
 Metaspace       used 66039K, capacity 67058K, committed 67456K, reserved 1110016K
  class space    used 6509K, capacity 6683K, committed 6784K, reserved 1048576K

Card table byte_map: [0x00007ff232022000,0x00007ff232fbf000] byte_map_base: 0x00007ff22f1be000

failed_mem_allocate 看上去是so中分配内存等失败了,so的接口代码中增加一些输出,进一步定位

F7ANTY
f7anty so文件是第三方的,不能增加输出
大约 2 年之前 回复

太多了,难道不能捡重要的错误吗

F7ANTY
f7anty 显示的错误是 Internal Error (instanceKlass.cpp:3358), pid=17314, tid=0x00007ff1fe6e6700,导致出错的线程类型是VMThread(jvm的内部线程)
大约 2 年之前 回复

上图中在crash的时候有输出 Failed: 0x0000000724e62b08 -> 0x0000000324c18200,通过hsdb分析附近的栈信息,如下

图片说明

图片说明

上图中标识的红框是不是表明yuv: ** BAD OOP 是一个坏的指针

先根据接口文档检查数据类型,如果没错的话可能是so问题,让其他人给个测试的函数再试试吧。

先根据接口文档检查数据类型,如果没错的话可能是so问题

你java类名要和so名称一致

第一步 建立一个监听类

建立监听类的作用是在应用中间件启动时自动执行加载程序。

1)创建一个类实现ServletContextListener 接口

2)实现contextInitialized方法

3)在项目的web.xml 文件中配置此监听类
第二步 添加动态库到系统变量

将dll/so文件所在的路径添加到系统环境java.library.path 中

添加过程需要使用到反射机制来进行,不能使用System.setProperty()进行设置,设置了也无效。直接看代码:
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20

private void addDirToPath(String s){
try {
//获取系统path变量对象
Field field=ClassLoader.class.getDeclaredField("sys_paths");
//设置此变量对象可访问
field.setAccessible(true);
//获取此变量对象的值
String[] path=(String[])field.get(null);
//创建字符串数组,在原来的数组长度上增加一个,用于存放增加的目录
String[] tem=new String[path.length+1];
//将原来的path变量复制到tem中
System.arraycopy(path,0,tem,0,path.length);
//将增加的目录存入新的变量数组中
tem[path.length]=s;
//将增加目录后的数组赋给path变量对象
field.set(null,tem);
} catch (Exception e) {
e.printStackTrace();
}
}
第三步 加载动态库文件

接下来就可以写上下文初始化的方法了:
?
1
2
3
4
5
6
7
8

public void contextInitialized(ServletContextEvent arg0) {
//获取存放dll文件的绝对路径(假设将dll文件放在系统根目录下的WEB-INF文件夹中)
String path=arg0.getServletContext().getRealPath("WEB-INF");
//将此目录添加到系统环境变量中
addDirToPath(path);
//加载相应的dll/so文件,注意要将'\'替换为'/'
System.load(path.replaceAll("\\","/")+"/XXXX.dll");
}
第四步 重启启动应用中间件(Tomcat|Weblogic)

至此就可以在你的java程序中使用dll/so文件的方法了。

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
Java通过JNI调用第三方dll文件问题

因为我对C语言不熟悉,所以我不会在.cpp文件中实现Java生成头文件,**所以想请各位大侠帮我写一个.cpp文件**,下面是我用java生成的头文件: /* DO NOT EDIT THIS FILE - it is machine generated */ #include <jni.h> /* Header for class test_CustomerShowDll */ #ifndef _Included_test_CustomerShowDll #define _Included_test_CustomerShowDll #ifdef __cplusplus extern "C" { #endif /* * Class: test_CustomerShowDll * Method: VC110_Init * Signature: ()Ljava/lang/Object; */ JNIEXPORT jobject JNICALL Java_test_CustomerShowDll_VC110_1Init (JNIEnv *, jobject); /* * Class: test_CustomerShowDll * Method: VC110_Cls * Signature: ()Ljava/lang/Object; */ JNIEXPORT jobject JNICALL Java_test_CustomerShowDll_VC110_1Cls (JNIEnv *, jobject); /* * Class: test_CustomerShowDll * Method: VC110_Display * Signature: (ILjava/lang/String;I)Ljava/lang/Object; */ JNIEXPORT jobject JNICALL Java_test_CustomerShowDll_VC110_1Display (JNIEnv *, jobject, jint, jstring, jint); #ifdef __cplusplus } #endif #endif 恳请各位大侠帮帮小弟,这对我来说很重要,跪谢!

【求助】有没有大佬做过AndroidStudio通过JNI NDK调用第三方so库?

我现在用JNI NDK调用,通过dlopen方法打开想要调用的so库,可是他这个dlopen只能打开jniLibs文件下的so库,但这个文件夹又是ndk-build才会生成,所以我现在按照网上的办法,写Android.mk ,将这个库在ndk-build的同时复制进jniLibs的路径下,但是他只能生成X86CPU架构的so,我在Application.mk 里边APP_ABI := all就会出错 可是只生成这一种so,程序又运行不了,有没有大佬知道怎么办? ![图片说明](https://img-ask.csdn.net/upload/201711/05/1509884321_223110.png) ![图片说明](https://img-ask.csdn.net/upload/201711/05/1509884348_447680.png) ![图片说明](https://img-ask.csdn.net/upload/201711/05/1509884360_470711.png) ![图片说明](https://img-ask.csdn.net/upload/201711/05/1509884369_706681.png) ![图片说明](https://img-ask.csdn.net/upload/201711/05/1509884378_352612.png)

菜鸟请教,Java项目中如何使用JNI调用.so文件,已有现成的.so文件

现在我有一个Java项目,是win系统下面,因为项目需求,需要调用.so文件去将.dat文件转换成.txt文件。因整个项目都在win下,没办法再提供Linux环境去运行.so文件。有没有方法直接在java项目中集成调用.so文件?我使用的工具是eclipse。哪位大佬能否详细解答一下。。最好有demo

安卓写so库调用第三方so库中非JNI接口函数

第三方so库中函数一部分为JNI接口函数,一部分为非JNI接口函数,如何在安卓中调用非JNI接口函数?若自己写一个so库来调用第三方库并调用其中非JNI接口函数如何实现

Android JNI 调用非JNI规范的so文件

请问Android中可以使用JNI调用非JNI规范纯C函数编译出的so文件吗 我使用的是针对特殊平台产生的非JNI规范的so文件,在Android官网看到谷歌采用了一种新的make方式,通过Cmake和CMakeLists.txt来链接编译 我看到官方的源码[谷歌官方示例](https://github.com/googlesamples/android-ndk/tree/master/native-activity/app/src/main/cpp "")直接放在默认的libry目录下,我想让他在自己的目录下找,但是最新的这种CMake方式,不知道so文件和头文件的目录应该怎么建立。[谷歌官方NDK](https://developer.android.com/studio/projects/add-native-code.html#new-project "") ``` add_library( iconv SHARED IMPORTED ) set_target_properties( # Specifies the target library. iconv # Specifies the parameter you want to define. PROPERTIES IMPORTED_LOCATION # Provides the path to the library you want to import. /libs/src/armeabi/libiconv.so) #include_directories( imported-lib/src/include/ ) target_link_libraries( # Specifies the target library. native-lib # Links the target library to the log library # included in the NDK. iconv ${log-lib} ) ``` 但是Make时一直报错,显示iconv.so needed by native-lib.so ; missing or no known rule to make it

关于android studio调用第三方so库的细节问题,如何建立Java和so库之间的通信?

最近开始研究ndk,因为c++不懂,所以比较吃力。 目前了解了c++文件的调用 1.ndk环境配置 2.c++文件导入 3.CmakeLists.txt文件配置 4.通过native-lib 建立Java和c++通信,函数调用 关于第三方so库调用网上的教程看了很多,但是因为非常小白,很多细节还是不明白, 关于so库的导入已经了解了,但是Cmakelists.txt文件里面该如何编写, 以及Java和so库如何通信,调用函数还是搞不懂。 比如说我有a.so, b.so, c.so三个文件,他们之间相互关联, 有一个void test(int a, int b)可调用的函数,那么在Java和CmakeLists.txt中我该如何操作呢? 希望大神可以指点一下,非常感谢!

java JNI 调用 c++ 动态库.so 文件抛错,如何调试?

![图片说明](https://img-ask.csdn.net/upload/201711/01/1509499054_793886.png) # Problematic frame: # C [libc.so.6+0x7a451] 为什么抛错的是这个?C标准库libc.so.6是存在的,应该是yum gcc 的时候就已经装好了

在JNI中调用第三方开源库的问题

我在JNI中需要用到json,然后移植了json-c。交叉编译出来的json-c是有两个链接和一个库的,![图片说明](https://img-ask.csdn.net/upload/201711/23/1511440038_686971.png) 但是在JNI中只能调用已.so结尾的动态库。所以我把libjson-c.so.2.0.1手动改名为libjson-c.so,然后放到工程里,编译没有问题。 最后运行APP的时候出错了!提示找不到libjson-c.so.2!!!为什么呢?我不是改成libjson-c.so了吗?为什么会加载libjson-c.so.2![图片说明](https://img-ask.csdn.net/upload/201711/23/1511440470_620340.png) 跪求大神释疑解惑。。。

java用JNI调用第三方库的时候,出现 java.lang.UnsatisfiedLinkError

Exception in thread "main" java.lang.UnsatisfiedLinkError: test.VoiceTest.MSPLogin(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String; at test.VoiceTest.MSPLogin(Native Method) at test.VoiceTest.main(VoiceTest.java:10) 这是调用自己封装的dll出现的问题

java web项目如何调用.so文件?

我这里有一个libhf_test.so文件,开始是放在android project里边的,调用什么的都没有问题。 现在新加了一个需求:把这个libhf_test.so文件放到web project项目中 然后我就写了个小小的测试类 ``` public class AppUtil{ static{ System.loadLibrary("hf_test"); } //so文件中的native方法 public native static String getNString(String paramsString); public static void main(String[] args) { System.out.println("load:"+getNString("020#2#B621#merexpand")); } } ``` 然后运行报错了 java.lang.UnsatisfiedLinkError: no hfswpay in java.library.path at java.lang.ClassLoader.loadLibrary(ClassLoader.java:1709) at java.lang.Runtime.loadLibrary0(Runtime.java:823) at java.lang.System.loadLibrary(System.java:1030) at com.umpay.huafubao.util.AppUtil.<clinit>(AppUtil.java:8) Exception in thread "main" 百度了好多解决办法,有把so文件放到java.library.path各个路径中的,有用System.load("路径/libhf_test.so")的,都不行啊 System.load("路径/libhf_test.so")会报文件类型的错,好像只能加载.dll文件 然而我就只想用System.loadLibrary()这个方法了, adnroid工程可以直接调用是因为,它本身已经做好了配置 我想web工程也需要做一些ndk的配置才能使用吧? 希望大家能指点一二 另外:还有说要用到.h头文件的,我的开发工具myeclipse,用Java,不是vs

Java调用JNI第一次成功返回结果,第二次程序直接挂死

有一个需求是用c++算法算得当前音频是否为异常音,大概会每3秒调用一次c++程序用来识别音频文件,其中c++和Java是用的JNI框架连接的。每当我运行测试,第一次识别能够正确返回值,第二次执行到调用JNI时程序直接挂死。不知道是什么原因 ``` //加载动态库 static { System.loadLibrary("onap"); } public native boolean AnomalyDetectionJNI(String audioPath); ``` 程序挂死打印出: ``` Process finished with exit code -1073740791 (0xC0000409) ```

android ndk生成的so库, 如何在java程序里调用?

把so库放到Android项目是可以跑的, 但放在java项目就不可以了. 我把so库复制到java项目的libs文件夹, 指定好java.library.path, 总是报java.lang.UnsatisfiedLinkError错误. 最后试了jna调用, 还是报错: java.lang.UnsatisfiedLinkError: Unable to load library 'libSmartAppUpdate': 找不到指定的模块。 我以前没用jni做过项目, 这两天踩了很多坑才把so编译出来的, 可能我没有配置什么, 导致失败, 知道的求帮忙下, 谢谢!! 我没C币了... 求好心人帮帮忙

java调用JNI的时候老是抛异常,求帮助

java调用jni的时候老是抛Exception in thread "main" java.lang.UnsatisfiedLinkError, 我从同一个.dll中导出的函数方法能够找到,用depends打开动态库也能发现封装的 函数名,就是Java调用的时候出现这个错误,求大神们帮帮忙啊 。。。

jni调用C#Dll,被调用DLL依赖的第三方DLL该放哪里?提示找不到

如题,我有一个第三方DLL文件,它本身也依赖其他一些第三方DLL库文件,我现在用java 通过Jacob的方式实现调用该DLL文件,总是提示找不到该DLL依赖的DLL文件,请问这些 依赖项该放哪里?或者怎么处理?

java 调用第三方 动态库

[code="java"] public class TestJava{ { System.loadLibrary("test"); } public native int add(int a,int b); public static void main(String argvs[]) { TestJava ts=new TestJava(); System.out.println(ts.add(4,5)); } } [/code] c++ test.h [code="c++"] #ifndef TEST_H #define TEST_H int add (int a,int b) #endif [/code] test.cpp [code="c++"] #include "test.h" int add (int a,int b) { return a+b; } [/code] 编译libtest.so g++ -fPIC -shared test.cpp -olibtest.so 编译运行java javac TestJava.java java TestJava 报错如下: Exception in thread "main" java.lang.UnsatisfiedLinkError: TestJava.add(II)I at TestJava.add(Native Method) at TestJava.main(TestJava.java:11) 这个什么原因,请指教。

jni回调函数 c++调用java

typedef void (*app_mrcp_callback)(enum MrcpMessageCallback_E type, void* message); int mrcp_init(app_mrcp_callback cb); struct MrcpJoinClassParam { char* siteID; int siteIDLen; int classID; char* userName; int userNameLen; char* userID; int userIDLen; int nodeID; int userType; char* password; int passwordLen; char* portal; int portalLen; int max_channels; char* customer; }; 这个回调jni里面应该怎么写,江湖急救

java使用JNI调用的dll依赖于其它dll路径该如何配置

jni调用dll扩展程序直接配置-Djava.library.path来指定dll所在目录即可以加载到dll,但是如果dll要依赖其它dll的时候会提示 Can't find dependent librarie即找不到dll的依赖库,这种情况可以将需要依赖的dll放到项目根目录下或者jdkbin目录下解决,但是想要导出jar包供其它调用就不行了,而且这种解决方法也不适用,总不能每次调用都把dll文件复制到根目录下,这时该如何处理?

Android NDk 怎么编译时动态链接第三方so库,有头文件

最近在做一个项目,大神把底层的算法封装成so(普通的c++函数),并给出头文件,我需要先 进行封装,然后给java调用。在我写的C++(符合JNI规范)里面调用so库函数, 下面贴图求解答: 1.项目的目录结构 ![图片说明](https://img-ask.csdn.net/upload/201512/09/1449650952_279016.png) 其中 libvvw.so就是第三方库; Test_vvw.h就是第三方库的头文件 2.java 的native方法定义 ![图片说明](https://img-ask.csdn.net/upload/201512/09/1449651054_89245.png) 3.native的实现方法体 FrameDecode.cpp文件 ![图片说明](https://img-ask.csdn.net/upload/201512/09/1449651104_378817.png) 4.Android.mk文件 ![图片说明](https://img-ask.csdn.net/upload/201512/09/1449654849_188618.png) 进行编译时 怎样动态链接so,我总是遇到![图片说明](https://img-ask.csdn.net/upload/201512/09/1449648769_631416.png)错误,求解答,非常感谢

jni调用java方法报错!!!

12-04 11:33:08.818: A/art(23825): art/runtime/check_jni.cc:70] JNI DETECTED ERROR IN APPLICATION: calling static method java.lang.String com.library.utils.MD5Utils.md5(java.lang.String) with CallObjectMethod 12-04 11:33:08.818: A/art(23825): art/runtime/check_jni.cc:70] in call to CallObjectMethod 12-04 11:33:08.818: A/art(23825): art/runtime/check_jni.cc:70] from java.lang.String com.mb.library.nativeutils.DmCoding.getMD5(java.lang.String) 12-04 11:33:08.818: A/art(23825): art/runtime/check_jni.cc:70] "main" prio=5 tid=1 Runnable 12-04 11:33:08.818: A/art(23825): art/runtime/check_jni.cc:70] | group="main" sCount=0 dsCount=0 obj=0x752bf000 self=0xf4827800 12-04 11:33:08.818: A/art(23825): art/runtime/check_jni.cc:70] | sysTid=23825 nice=0 cgrp=default sched=0/0 handle=0xf74bbbec 12-04 11:33:08.818: A/art(23825): art/runtime/check_jni.cc:70] | state=R schedstat=( 387939683 56711068 527 ) utm=33 stm=5 core=0 HZ=100 12-04 11:33:08.818: A/art(23825): art/runtime/check_jni.cc:70] | stack=0xff7b0000-0xff7b2000 stackSize=8MB 12-04 11:33:08.818: A/art(23825): art/runtime/check_jni.cc:70] | held mutexes= "mutator lock"(shared held) 12-04 11:33:08.818: A/art(23825): art/runtime/check_jni.cc:70] at com.mb.library.nativeutils.DmCoding.getMD5(Native method) 12-04 11:33:08.818: A/art(23825): art/runtime/check_jni.cc:70] at com.colorpick.activity.CorCppTestActivity.onClick(CorCppTestActivity.java:53) 12-04 11:33:08.818: A/art(23825): art/runtime/check_jni.cc:70] at android.view.View.performClick(View.java:4908) 12-04 11:33:08.818: A/art(23825): art/runtime/check_jni.cc:70] at android.view.View$PerformClick.run(View.java:20378) 12-04 11:33:08.818: A/art(23825): art/runtime/check_jni.cc:70] at android.os.Handler.handleCallback(Handler.java:815) 12-04 11:33:08.818: A/art(23825): art/runtime/check_jni.cc:70] at android.os.Handler.dispatchMessage(Handler.java:104) 12-04 11:33:08.818: A/art(23825): art/runtime/check_jni.cc:70] at android.os.Looper.loop(Looper.java:194) 12-04 11:33:08.818: A/art(23825): art/runtime/check_jni.cc:70] at android.app.ActivityThread.main(ActivityThread.java:5691) 12-04 11:33:08.818: A/art(23825): art/runtime/check_jni.cc:70] at java.lang.reflect.Method.invoke!(Native method) 12-04 11:33:08.818: A/art(23825): art/runtime/check_jni.cc:70] at java.lang.reflect.Method.invoke(Method.java:372) 12-04 11:33:08.818: A/art(23825): art/runtime/check_jni.cc:70] at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:959) 12-04 11:33:08.818: A/art(23825): art/runtime/check_jni.cc:70] at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:754) 12-04 11:33:08.818: A/art(23825): art/runtime/check_jni.cc:70] 12-04 11:33:08.818: A/libc(23825): Fatal signal 6 (SIGABRT), code -6 in tid 23825 (com.colorpick)

在中国程序员是青春饭吗?

今年,我也32了 ,为了不给大家误导,咨询了猎头、圈内好友,以及年过35岁的几位老程序员……舍了老脸去揭人家伤疤……希望能给大家以帮助,记得帮我点赞哦。 目录: 你以为的人生 一次又一次的伤害 猎头界的真相 如何应对互联网行业的「中年危机」 一、你以为的人生 刚入行时,拿着傲人的工资,想着好好干,以为我们的人生是这样的: 等真到了那一天,你会发现,你的人生很可能是这样的: ...

程序员请照顾好自己,周末病魔差点一套带走我。

程序员在一个周末的时间,得了重病,差点当场去世,还好及时挽救回来了。

Java基础知识面试题(2020最新版)

文章目录Java概述何为编程什么是Javajdk1.5之后的三大版本JVM、JRE和JDK的关系什么是跨平台性?原理是什么Java语言有哪些特点什么是字节码?采用字节码的最大好处是什么什么是Java程序的主类?应用程序和小程序的主类有何不同?Java应用程序与小程序之间有那些差别?Java和C++的区别Oracle JDK 和 OpenJDK 的对比基础语法数据类型Java有哪些数据类型switc...

和黑客斗争的 6 天!

互联网公司工作,很难避免不和黑客们打交道,我呆过的两家互联网公司,几乎每月每天每分钟都有黑客在公司网站上扫描。有的是寻找 Sql 注入的缺口,有的是寻找线上服务器可能存在的漏洞,大部分都...

Intellij IDEA 实用插件安利

1. 前言从2020 年 JVM 生态报告解读 可以看出Intellij IDEA 目前已经稳坐 Java IDE 头把交椅。而且统计得出付费用户已经超过了八成(国外统计)。IDEA 的...

搜狗输入法也在挑战国人的智商!

故事总是一个接着一个到来...上周写完《鲁大师已经彻底沦为一款垃圾流氓软件!》这篇文章之后,鲁大师的市场工作人员就找到了我,希望把这篇文章删除掉。经过一番沟通我先把这篇文章从公号中删除了...

总结了 150 余个神奇网站,你不来瞅瞅吗?

原博客再更新,可能就没了,之后将持续更新本篇博客。

副业收入是我做程序媛的3倍,工作外的B面人生是怎样的?

提到“程序员”,多数人脑海里首先想到的大约是:为人木讷、薪水超高、工作枯燥…… 然而,当离开工作岗位,撕去层层标签,脱下“程序员”这身外套,有的人生动又有趣,马上展现出了完全不同的A/B面人生! 不论是简单的爱好,还是正经的副业,他们都干得同样出色。偶尔,还能和程序员的特质结合,产生奇妙的“化学反应”。 @Charlotte:平日素颜示人,周末美妆博主 大家都以为程序媛也个个不修边幅,但我们也许...

MySQL数据库面试题(2020最新版)

文章目录数据库基础知识为什么要使用数据库什么是SQL?什么是MySQL?数据库三大范式是什么mysql有关权限的表都有哪几个MySQL的binlog有有几种录入格式?分别有什么区别?数据类型mysql有哪些数据类型引擎MySQL存储引擎MyISAM与InnoDB区别MyISAM索引与InnoDB索引的区别?InnoDB引擎的4大特性存储引擎选择索引什么是索引?索引有哪些优缺点?索引使用场景(重点)...

如果你是老板,你会不会踢了这样的员工?

有个好朋友ZS,是技术总监,昨天问我:“有一个老下属,跟了我很多年,做事勤勤恳恳,主动性也很好。但随着公司的发展,他的进步速度,跟不上团队的步伐了,有点...

我入职阿里后,才知道原来简历这么写

私下里,有不少读者问我:“二哥,如何才能写出一份专业的技术简历呢?我总感觉自己写的简历太烂了,所以投了无数份,都石沉大海了。”说实话,我自己好多年没有写过简历了,但我认识的一个同行,他在阿里,给我说了一些他当年写简历的方法论,我感觉太牛逼了,实在是忍不住,就分享了出来,希望能够帮助到你。 01、简历的本质 作为简历的撰写者,你必须要搞清楚一点,简历的本质是什么,它就是为了来销售你的价值主张的。往深...

魂迁光刻,梦绕芯片,中芯国际终获ASML大型光刻机

据羊城晚报报道,近日中芯国际从荷兰进口的一台大型光刻机,顺利通过深圳出口加工区场站两道闸口进入厂区,中芯国际发表公告称该光刻机并非此前盛传的EUV光刻机,主要用于企业复工复产后的生产线扩容。 我们知道EUV主要用于7nm及以下制程的芯片制造,光刻机作为集成电路制造中最关键的设备,对芯片制作工艺有着决定性的影响,被誉为“超精密制造技术皇冠上的明珠”,根据之前中芯国际的公报,目...

优雅的替换if-else语句

场景 日常开发,if-else语句写的不少吧??当逻辑分支非常多的时候,if-else套了一层又一层,虽然业务功能倒是实现了,但是看起来是真的很不优雅,尤其是对于我这种有强迫症的程序"猿",看到这么多if-else,脑袋瓜子就嗡嗡的,总想着解锁新姿势:干掉过多的if-else!!!本文将介绍三板斧手段: 优先判断条件,条件不满足的,逻辑及时中断返回; 采用策略模式+工厂模式; 结合注解,锦...

离职半年了,老东家又发 offer,回不回?

有小伙伴问松哥这个问题,他在上海某公司,在离职了几个月后,前公司的领导联系到他,希望他能够返聘回去,他很纠结要不要回去? 俗话说好马不吃回头草,但是这个小伙伴既然感到纠结了,我觉得至少说明了两个问题:1.曾经的公司还不错;2.现在的日子也不是很如意。否则应该就不会纠结了。 老实说,松哥之前也有过类似的经历,今天就来和小伙伴们聊聊回头草到底吃不吃。 首先一个基本观点,就是离职了也没必要和老东家弄的苦...

2020阿里全球数学大赛:3万名高手、4道题、2天2夜未交卷

阿里巴巴全球数学竞赛( Alibaba Global Mathematics Competition)由马云发起,由中国科学技术协会、阿里巴巴基金会、阿里巴巴达摩院共同举办。大赛不设报名门槛,全世界爱好数学的人都可参与,不论是否出身数学专业、是否投身数学研究。 2020年阿里巴巴达摩院邀请北京大学、剑桥大学、浙江大学等高校的顶尖数学教师组建了出题组。中科院院士、美国艺术与科学院院士、北京国际数学...

为什么你不想学习?只想玩?人是如何一步一步废掉的

不知道是不是只有我这样子,还是你们也有过类似的经历。 上学的时候总有很多光辉历史,学年名列前茅,或者单科目大佬,但是虽然慢慢地长大了,你开始懈怠了,开始废掉了。。。 什么?你说不知道具体的情况是怎么样的? 我来告诉你: 你常常潜意识里或者心理觉得,自己真正的生活或者奋斗还没有开始。总是幻想着自己还拥有大把时间,还有无限的可能,自己还能逆风翻盘,只不是自己还没开始罢了,自己以后肯定会变得特别厉害...

百度工程师,获利10万,判刑3年!

所有一夜暴富的方法都写在刑法中,但总有人心存侥幸。这些年互联网犯罪高发,一些工程师高技术犯罪更是引发关注。这两天,一个百度运维工程师的案例传遍朋友圈。1...

程序员为什么千万不要瞎努力?

本文作者用对比非常鲜明的两个开发团队的故事,讲解了敏捷开发之道 —— 如果你的团队缺乏统一标准的环境,那么即使勤劳努力,不仅会极其耗时而且成果甚微,使用...

为什么程序员做外包会被瞧不起?

二哥,有个事想询问下您的意见,您觉得应届生值得去外包吗?公司虽然挺大的,中xx,但待遇感觉挺低,马上要报到,挺纠结的。

当HR压你价,说你只值7K,你该怎么回答?

当HR压你价,说你只值7K时,你可以流畅地回答,记住,是流畅,不能犹豫。 礼貌地说:“7K是吗?了解了。嗯~其实我对贵司的面试官印象很好。只不过,现在我的手头上已经有一份11K的offer。来面试,主要也是自己对贵司挺有兴趣的,所以过来看看……”(未完) 这段话主要是陪HR互诈的同时,从公司兴趣,公司职员印象上,都给予对方正面的肯定,既能提升HR的好感度,又能让谈判气氛融洽,为后面的发挥留足空间。...

面试:第十六章:Java中级开发(16k)

HashMap底层实现原理,红黑树,B+树,B树的结构原理 Spring的AOP和IOC是什么?它们常见的使用场景有哪些?Spring事务,事务的属性,传播行为,数据库隔离级别 Spring和SpringMVC,MyBatis以及SpringBoot的注解分别有哪些?SpringMVC的工作原理,SpringBoot框架的优点,MyBatis框架的优点 SpringCould组件有哪些,他们...

面试阿里p7,被按在地上摩擦,鬼知道我经历了什么?

面试阿里p7被问到的问题(当时我只知道第一个):@Conditional是做什么的?@Conditional多个条件是什么逻辑关系?条件判断在什么时候执...

无代码时代来临,程序员如何保住饭碗?

编程语言层出不穷,从最初的机器语言到如今2500种以上的高级语言,程序员们大呼“学到头秃”。程序员一边面临编程语言不断推陈出新,一边面临由于许多代码已存在,程序员编写新应用程序时存在重复“搬砖”的现象。 无代码/低代码编程应运而生。无代码/低代码是一种创建应用的方法,它可以让开发者使用最少的编码知识来快速开发应用程序。开发者通过图形界面中,可视化建模来组装和配置应用程序。这样一来,开发者直...

面试了一个 31 岁程序员,让我有所触动,30岁以上的程序员该何去何从?

最近面试了一个31岁8年经验的程序猿,让我有点感慨,大龄程序猿该何去何从。

大三实习生,字节跳动面经分享,已拿Offer

说实话,自己的算法,我一个不会,太难了吧

程序员垃圾简历长什么样?

已经连续五年参加大厂校招、社招的技术面试工作,简历看的不下于万份 这篇文章会用实例告诉你,什么是差的程序员简历! 疫情快要结束了,各个公司也都开始春招了,作为即将红遍大江南北的新晋UP主,那当然要为小伙伴们做点事(手动狗头)。 就在公众号里公开征简历,义务帮大家看,并一一点评。《启舰:春招在即,义务帮大家看看简历吧》 一石激起千层浪,三天收到两百多封简历。 花光了两个星期的所有空闲时...

《Oracle Java SE编程自学与面试指南》最佳学习路线图2020年最新版(进大厂必备)

正确选择比瞎努力更重要!

字节跳动面试官竟然问了我JDBC?

轻松等回家通知

面试官:你连SSO都不懂,就别来面试了

大厂竟然要考我SSO,卧槽。

实时更新:计算机编程语言排行榜—TIOBE世界编程语言排行榜(2020年6月份最新版)

内容导航: 1、TIOBE排行榜 2、总榜(2020年6月份) 3、本月前三名 3.1、C 3.2、Java 3.3、Python 4、学习路线图 5、参考地址 1、TIOBE排行榜 TIOBE排行榜是根据全世界互联网上有经验的程序员、课程和第三方厂商的数量,并使用搜索引擎(如Google、Bing、Yahoo!)以及Wikipedia、Amazon、YouTube统计出排名数据。

立即提问
相关内容推荐