fatal error LNK1112が発生する
2023年9月18日
以前作ったTRNSYS17のコンポーネントを、TRNSYS18用にビルドしようとしたらリンカーでエラーが発生する。
エラー fatal error LNK1112: モジュールのコンピューターの種類 'x64' は対象コンピューターの種類 'x86' と競合しています。
原因
TRNSYS18では、それ以前のバージョンから64bit化されています。これに対して、TRNSYS17以前のバージョンで開発したコンポーネントは32bitでビルドされています。
TRNSYS18で使用するには64bitへ変更が必須です。通常はプラットフォームをx86からx64へ切換えますが、なぜか今回は変えてもエラーが発生します。
散々調べたら、なぜかコマンドラインオプションで/MACHINE:I386が指定されていました。こういうのなかなか気付かないですよね?
対策
単純な話、/MACHINE:I386を削除すればOK.
そもそもなんで入っていたかですが、元々Compaq Visual fortran(懐かしい!)から変換したプロジェクトには、これが入ることがあるようです。
動作環境
以下の環境で動作を確認しています。
- Windows11 Pro(64bit, 22H2)
- TRNSYS18.05.0001(64bit)
- Intel Fortran compiler 2023.2(OneAPI)
- Visual Studio Professional 2019