以下は JE2BWM ほかが作成した翻訳 です。 原文は University of California より GFDL で配付されており、 この翻訳も GFDL に従います。
原文: FORTRAN applications   (翻訳対象の更新日付は 11:03 PM UTC, July 05 2006 です)。

FORTRAN アプリケーション

boinc.gif
(英語のみ)

Windows: cygwin の場合

ファイル boinc_api_fortran.C を api/Makefile.am の中に含めます。 ただし、'zip' call 群*は 'libboinc_zip.a' とのリンクを避けるため、コメントアウトしてください。

リンクするためには、 winmm.dll を含める(-lwinmm) 必要があります。

Windows: Visual Studio の場合

2004-06-16 原注: このページは古いものになってしまいました。 そのうち更新します。 (機能は今や extern"C" と宣言されるので、 C++ マングリングはもはやおこりません。 そして、boinc_api_fortran.C ラッパーが用意されました。 ) -- quarl@ssl

原注: ここでの説明に類似した があります。 (ただし、古い BOINC のコードに基づいています) 。 その README(原文) も見てください。

新しい FORTRAN プロジェクトを作るところから始めてください。 FORTRAN に特有なファイルを全部追加します。 次に、BOINC ライブラリのために必要なファイルを追加します(たとえば boinc_api.C)。 BOINC と FORTRAN のファイルが、 同一のタイプの標準ライブラリ(standard library)群を使って コンパイルされるよう、確認してください。 すなわち、たとえば BOINC が、マルチスレッド版のデバッグ用 DLL ライブラリで コンパイルされていたら、FORTRAN ファイルも同一の DLL設定でコンパイルされる ことを確認しておきます。

FORTRAN から呼びたいすべての BOINC 関数について、 インターフェースとサブルーチンを以下の例のように 追加しなければなりません。

INTERFACE
  SUBROUTINE boinc_finish(status)
  END SUBROUTINE boinc_finish
END INTERFACE

引数の型を宣言するのを忘れてはなりません。
INTEGER status

次に、コンパイラに対して、インターフェースをとろうと している関数が C 言語のルーチンであることを伝えなければ なりません。 そのために、以下の文を追加します。

 !DEC$ ATTRIBUTES C :: boinc_finish
BOINC は コンパイルしてC++ 用の[オブジェクト]ファイルが できるように作られているので、 FORTRAN コンパイラは、[BOINCの] オブジェクトファイル 内にある標準の関数名を見つけ出すことができないでしょう。 ですから、本当の関数名に別名をたとえば下記のように 追加しなければならなくなるでしょう。
 !DEC$ ATTRIBUTES ALIAS : '?boinc_finish@@YAHH@Z' :: boinc__finish

[ここで、ALIAS:の次に指定する本当の] 関数名は、 [BOINCの]オブジェクトファイルの中で 見つけることができます。 [それを知るために、] あなたのコンパイルディレクトリに行って、dumpbin を走らせて下さい。

c:\fortranproject\Release>dumpbin /symbols boinc_api.obj
これでシンボル一覧が得られますので、その中で 本当の関数名を見つけることができます。

すると、例のインターフェースは結局以下のような形になります。

INTERFACE
  SUBROUTINE boinc_finish(status)
    !DEC$ ATTRIBUTES C :: boinc_finish
    !DEC$ ATTRIBUTES ALIAS : '?boinc_finish@@YAHH@Z' :: boinc__finish
    INTEGER status
  END SUBROUTINE boinc_finish
END INTERFACE

これで、BOINC の関数を FORTRAN から呼べるようになりました。
call boinc_finish(0)

 


BOINCの訳のメインページに戻る | (原文のメインページに戻る)
 

最終更新時刻 00:48:29, 2006年08月12日(JST)
Copyright © 2008 University of California. Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.2 or any later version published by the Free Software Foundation.
Copyright © 2008 Komori Hitoshi(je2bwm at jarl.com). Japanese translation from English web pages on BOINC. Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.2 or any later version published by the Free Software Foundation.