fortan dll在本地可以运行成功,移植到其他电脑上报错Exception in thread "main" java.lang.UnsatisfiedLinkError: 找不到指定的模块。

坑!!!大大的坑!!!

本项目需要实现java调用fortran的dll,我在本地编译好apae.dll,然后java调用dll成功!

将apae.dll发送给对方,同样的java代码和fortran的dll,始终各种报错

要么是

Exception in thread "main" java.lang.UnsatisfiedLinkError: 找不到指定的模块。

要么是如下错误:

---------------------------
Intel(r) Visual Fortran run-time error 
---------------------------
forrtl: severe (46): inconsistent OPEN/CLOSE parameters, unit 10, file D:\TEST.txt Image              PC                Routine            Line        Source             
libifcoremdd.dll   0000000019A22CA8  Unknown               Unknown  Unknown
libifcoremdd.dll   0000000019A1C239  Unknown               Unknown  Unknown
libifcoremdd.dll   0000000019A0816C  Unknown               Unknown  Unknown
libifcoremdd.dll   00000000199772B7  Unknown               Unknown  Unknown
libifcoremdd.dll   0000000019976B61  Unknown               Unknown  Unknown
libifcoremdd.dll   00000000199950FF  Unknown               Unknown  Unknown
ap8ae8.dll         000007FEEF623969  AP8AE8MAIN                 70  ap8ae8.for
ap8ae8.dll         000007FEEF624BB4  AP8AE8                     37  ap8ae8.for
jna45732181076738  000007FEEFCA8E33  Unknown               Unknown  Unknown
jna45732181076738  000007FEEFCA8087  Unknown               Unknown  Unknown
jna45732181076738  000007FEEFC99D5B  Unknown               Unknown  Unknown
jna45732181076738  000007FEEFC941C7  Unknown               Unknown  Unknown
                   0000000002867F74  Unknown               Unknown  Unknown
                   000000000258C9F8  Unknown               Unknown  Unknown

Stack trace terminated abnormally.

仿佛一看,以为是代码本身大错误,于是我花了三天时间修改代码,关键是我的fortarn 77代码比较老,面对同样的代码,编译器有时报错,有时又不报错,于是我真心以为是代码问题!!!

后来真的改了无数次代码,发现一个奇怪的问题是,我能跑成功的代码,即使不能到其他电脑上跑,但是去他电脑上本地编译后就能成功。想想可能是编译器的问题,也许有依赖项,那么以前的思路肯定就错了,然后回头看看报错提示

libifcoremdd.dll   0000000019A22CA8  Unknown               Unknown  Unknown
libifcoremdd.dll   0000000019A1C239  Unknown               Unknown  Unknown
libifcoremdd.dll   0000000019A0816C  Unknown               Unknown  Unknown
libifcoremdd.dll   00000000199772B7  Unknown               Unknown  Unknown

确实有依赖项。

赶紧调整思路,在网上搜索fortran编译器编译dll时如何去掉依赖项,然后看到这个贴子:

https://blog.csdn.net/dongzhe8/article/details/80608579

打开Vs的项目属性,在libraray的runtime library看到有默认的依赖项,

fortan dll在本地可以运行成功,移植到其他电脑上报错Exception in thread

 

 

然后去掉依赖项:

fortan dll在本地可以运行成功,移植到其他电脑上报错Exception in thread

这样编译后的dll就可以移植到其他平台了

所以Fortran编译器有默认设置,编译时要小心!!!

 

教训:

1、一定要多看看报错

2、不要执着与报错提示

3、相信自己的代码

你可能感兴趣的:(Fortran,java)