以前、サポートされていないコンパイラと高価なライブラリを必要とする古いコードを、Windows 上の Eclipse で gfortran を使用するバージョンに更新する際に問題が発生しました。しばらく休ませてから、最近はまったく別のアプローチを取り、プログラムをゼロから再構築し、ubuntu マシンで開発しましたが、同僚が貢献できるように、Windows マシンに戻したいと考えています。 .
ステータス:
- プログラムは、GCC GNU コンパイラを使用して ubuntu マシンでコンパイル、実行し、良好な結果をもたらします
- Windows 7 マシン、64 ビット
- lapack と liblapack-devel を使用した Cygwin のインストール (gnu fortran 用) (ただし、blas と lapack を手動でコンパイルするため、これらは使用しません)
- (C:/cygwin/lib を Windows パスに追加)
元の問題:
プログラムは cygwin でコンパイルされます ( make
-command を呼び出し、make コマンドを呼び出して、ここにある makefile を呼び出します: http://thijsvandenbrande.be/phd/hamfemInstall/makefile
これにより、ファイル hamfem.exe が返され、Windows でダブルクリックして実行すると、次のエラーが返されます。The program can't start because cyglapack-0.dll is missing from your computer. Try reinstalling the program to fix this problem.
cygwin から実行可能ファイルを実行する場合、./hamfem.exe
コマンドを呼び出すと、実行可能ファイルの実行が開始されます。ただし、この実行可能ファイルを同僚に渡して、入力ファイル (実行可能ファイルへの相対パスを持つフォルダーにあります) を変更できるようにするためのソリューションが必要です。
以下のコメントをさらに進めて、次のことを試しました。
- Windowsパスにファイルへの正確なパスを追加し、
C:\cygwin\lib\lapack\cyglapack-0.dll
後で再起動しても役に立ちません。 - ライブラリを呼び出す前にメイクファイルに -static を追加すると、依存関係エラーが発生します。これは、他の多くのコマンド (DPBTRF と DPBTRS) に依存する lapack ライブラリの 2 つのコマンドを使用するためです。これらのコマンドは、mainprog.f90 モジュールで使用されます。エラー:
/usr/lib/gcc/i686-pc-cygwin/4.7.3/../../../liblapack.a(dpbtrf.f.o): In function 'dpbtrf': /usr/src/debug/lapack-3.4.2-1/SRC/dpbtrf.f:277: undefined reference to 'dtrsm_'
および依存関係を示すさらに数行。 - ファイルを src フォルダーに追加し
liblapack.a
ますが、コンパイラーは常に cygwin の lapack に戻ります
lapack の Web サイトでは、通常、関数とその依存関係 ( DPBTRFの例) をダウンロードできますが、これらはもう利用できません。これらの 2 つの関数とその依存関係を、事前にコンパイルしてフォルダーに追加できる静的ライブラリ ファイルに含める方法を別の方法で考えている人はいますsrc
か?
現在の(準)修正
次のことは(少し)私にとってはうまくいきました:http://gcc.gnu.org/wiki/GfortranBuildの指示に従って、Cygwinのフォルダーにlibblas.aとliblapack.aを手動でビルドし、/usr/src
メイクファイル。更新されたメイクファイルは、http: //thijsvandenbrande.be/phd/hamfemInstall/makefileNewにあります。
このコードは、cygwin から make コマンドを実行する (プロセスの次のステップ、Eclipse から実行する) ことにより、Windows でうまくコンパイルされます。そのフォルダーを別の場所に移動します。このプロセスは非常に手間がかかるため、すべてを理解するために、ここに回答を追加し、それを機能させるために cygwin に解析する必要があるコマンドを示します。
参考までに: 私のファイル構造は次のようになります (ビルド後、.exe ファイルを 1 フォルダー上に移動します。Linux バージョンと Windows バージョンの両方で):
- hamfem.exe
- の
- 入力.txt
- NGCR_Building01.txt
- アウト
- (ルーチンの出力ファイル用の空のフォルダー)
- ソース
- hamfem.f90 (メインファイル)
- mainprog.f90 (lapack からのコマンドを含むファイル)
- ...(他のモジュールの束)
- メイクファイル