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.****.net/dongzhe8/article/details/80608579
打开Vs的项目属性,在libraray的runtime library看到有默认的依赖项,
然后去掉依赖项:
这样编译后的dll就可以移植到其他平台了
所以Fortran编译器有默认设置,编译时要小心!!!
教训:
1、一定要多看看报错
2、不要执着与报错提示
3、相信自己的代码