Record: 在KylinV10上调用编译完成的C++的一组计算动态库,出现崩溃问题。(Windows上运行正常) 调用方式:
- Java通过JNA单线程循环调用该组动态库内不同的计算接口。
- Qt通过C++动态库调用
分析步骤
- 编译提供带调试信息的动态库:
-g - 查看jvm崩溃时的日志文件:
xx_errxxx;或GDB查看Qt程序进程中堆栈; - 日志中提示崩溃时的c++库的堆栈情况,发现堆栈中函数跳转由该组库中的某个函数内调用的函数跳转到另一个库的同名函数
- 考虑命名空间或函数重命名,本次修改该组库中涉及调用的函数增加后缀标识
原因
- 全局函数同名:该组计算库单独使用均正常,同时调用时由于函数重名导致调用异常
- 未定义命名空间