FORTRAN アプリケーション |
|
ファイル boinc_api_fortran.C を api/Makefile.am の中に含めます。 ただし、'zip' call 群*は 'libboinc_zip.a' とのリンクを避けるため、コメントアウトしてください。
リンクするためには、 winmm.dll を含める(-lwinmm) 必要があります。
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_finishBOINC は コンパイルして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)
最終更新時刻 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.