我正在使用 JNA 运行一个共享库(使用 Intel 编译)。在极少数情况下,Fortran 调用以 forrtl : severe
结束。代码。就像是
forrtl: severe (408): fort: (3): Subscript #1 of the array IWU has value 0 which is less than the lower bound of 1
有没有办法使用 JNA“捕捉”这个运行时错误?
最佳答案
没有将错误代码从 native 代码传递到 JNA 的通用机制。充其量,JNA 会从函数的返回值中知道函数失败。
但是,如果 native 代码提供了读取这些错误代码的方法(例如,Windows GetLastError()
函数,或 Linux 和 macOS 上的全局 errno
变量),则可以检索到更具体的细节。
对于 Intel Fortran“严重”错误,程序执行会停止,除非它在 native 端进行处理,所以我认为您无法在 JNA 中“捕获”它,除非它已经在您的库中“捕获” using... 在这种情况下,您只需要对失败的方法调用做出适当的 react 。可以修改 Fortran 源以捕获一些运行时错误(例如在 I/O 中,动态内存管理或图像控制)并返回此状态。但是,对于这个问题的特定数组边界错误,这可能不适用。
关于java - 如何使用 JNA 处理 Fortran RTL 错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62951821/