5

私は Fortran と Intel コンパイラ全体に非常に慣れていません (Visual Studio 統合のない IMSL ライブラリを備えた Windows ベースの Intel コンパイラを使用しているため、コマンドラインのみです)。

問題は非常に単純なはずです。コンパイルする必要のある Fortran プログラムがあり、それは 4 つの異なるソース コード部分として格納されています。メイン プログラム (およびいくつかのサブルーチン) は、central.for という名前のコード ファイルに格納されています。また、s1.for、s2.for、および s3.for と呼ぶ 3 つのファイルもあり、それぞれに 1 つのサブルーチンのみが含まれています (letsそれらを sub1-sub3) と呼び、メインプログラムはありません。メイン プログラムは、s1 ~ s3 および central.for に格納されているサブルーチンを呼び出します。

問題は、どのようにコンパイルする必要があるかです。

central.for をコンパイルしようとすると、error LNK2019: unresolved external symbol _SUB1 referenced in function _MAIN__. 同様に、SUB2 と SUB3 についても同じメッセージが表示されます。

s1.for-s3.for をコンパイルしようとすると、error LNK2019: unresolved external symbol _MAIN__ referenced in function _main

どうにかしてそれらをリンクする必要があることは明らかです。しかし、私は方法がわかりません

4

2 に答える 2

3

最初にリンクせずにプログラムの断片をコンパイルしてから、それらをすべて一緒にリンクする必要があります。したがって、コマンドラインは次のようになります。

ifort /c s1.for
ifort /c s2.for
ifort /c s3.for
ifort /c central.for

はの/c略です/compile-only/nolinkも機能します。これにより、ファイル s1.o、s2.o、s3.o、および central.o がそれぞれ生成されます。上記は任意の順序で実行できます。これで、個々のピースがリンクされ、次のようになります

ifort /exe:central.exe central.o s1.o s2.o s3.o

実行可能ファイルをビルドします。

モジュールを使用する最新の fortran コードをコンパイルしていて、(たとえば) central.for のメイン プログラムにuse s2. その場合、中央の前に s2をコンパイルする必要があります。/cその場合に s2 をコンパイルすると、追加の出力ファイル s2.mod が得られます。その s2.mod ファイルは、central.for をコンパイルするために必要です。しかし、ファイル名の拡張子を考えると、これは古いコードである可能性が高く、モジュールはおそらく問題ではありません。

于 2011-05-03T00:32:39.973 に答える
0

これが私がやった方法です。サポートする各関数は、静的ライブラリでコンパイルされます。次に、メイン プログラム プロジェクトに既存のアイテムを追加し、スタティック ライブラリ.libファイル (コンパイルからの出力) を選択します。ソースがメインコードの一部であるかのように関数を呼び出すだけです( を使用CALL MYLIBFUN()

幸運を。

于 2011-05-03T00:31:57.153 に答える