LINK : fatal error LNK1104: cannot open file 'ifconsol.lib',VS2019升到VS2022之后,abaqus 2022提交子程序直接报这个,路径全对不上,白折腾一下午。
VS2019 + oneAPI 2022的经典配置,换成VS2022之后不用把oneAPI整个卸了重装,直接modify就行。控制面板 → 程序和功能 → Intel oneAPI Base Toolkit → 右键更改 → 走一遍安装向导。第三步的组件选择界面,编译器那边会有Visual Studio 2022的集成选项,勾上,别取消默认的2022集成。Base Toolkit modify完再modify一次HPC Toolkit,两个都得走一遍,HPC Toolkit里的Fortran编译器才是关键,Base里的C++编译器ABAQUS用不到但也得配套。modify过程大概十五到二十分钟,装完重启一次。
Abaqus 2022、Windows 10 22H2、VS2022 Community、Intel oneAPI 2022.3、ifort 2021.6.0、D:\SIMULIA\EstProducts\2022\win_b64\SMA\site\win86_64.env、D:\SIMULIA\EstProducts\2022\win_b64\SMA\site\abaqus_v6.env、D:\temp\user_sub\test.for。

modify完之后,win86_64.env里的编译器路径要改,原始文件里如果写的是2019的路径,改成VS2022的。VC的路径类似C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Auxiliary\Build\vcvars64.bat,Intel的编译器路径类似C:\Program Files (x86)\Intel\oneAPI\compiler\2022.3.0\windows\bin\intel64\ifort.exe。abaqus_v6.env里如果有ifort相关的变量也要同步改。
有一次同事的机器从VS2019升到VS2022,modify oneAPI完提交一个UMAT,编过了但链接报“LNK2005: already defined”。当时是周一早上,他到工位第一件事就是提交上周五没跑完的模型,旁边同事在泡咖啡,咖啡机嗡嗡响。他删了重装oneAPI也没用,最后发现是旧版本oneAPI的残留库路径还留在环境变量里,LIB和INCLUDE指向了2022.3和2021.4两个版本的目录,链接的时候把两套库都拉进去了,符号冲突。在“系统属性 → 环境变量”里把oneAPI相关的PATH、LIB、INCLUDE重新理了一遍,只留2022.3一套,重启命令行,好了。
环境变量PATH里如果同时有多个oneAPI版本,命令行里setvars.bat初始化的时候会加载最前面那个,但abaqus的启动脚本读的是win86_64.env里指定的路径,两边不一致就会出问题。统一在abaqus.bat前面加一行call setvars.bat初始化,让abaqus继承当前命令行的环境,比改win86_64.env省事。setvars.bat路径在C:\Program Files (x86)\Intel\oneAPI\setvars.bat。
版本兼容性这块,Abaqus 2021支持到VS2019 + oneAPI 2021,Abaqus 2022支持到VS2022 + oneAPI 2022,Abaqus 2023之后陆续转向ifx,经典组合到2022为止。升级完如果UMAT跑的结果跟升级前不一致,先别怀疑材料参数,查编译器版本和优化选项。ifort的/O2和/Ob2对浮点运算的处理有细微差异,长时程加载的累积误差会体现出来。D:\SIMULIA\EstProducts\2022\win_b64\SMA\site\abaqus_v6.env,compiler=ifort,linker=link。
免责声明:本文系网络转载或改编,未找到原创作者,版权归原作者所有。如涉及版权,请联系删