Fortran Builder for Mac FAQ – よくある質問とその答え

  • Fortran Builder は OS X のどのバージョンに対応していますか? [答え]
  • USB キーを破損してしまいました.新しい USB キーを貰えますか? [答え]
  • フローティングライセンスなど,USB キー以外のライセンス形態での利用は可能ですか? [答え]
  • プロジェクトとは何ですか? [答え]
  • プロジェクトは必ず作らなければいけないのですか? [答え]
  • 「duplicate symbol _main in:」というリンクエラーが出てプログラムがビルドできません. [答え]
  • 「実行」ボタンが灰色のままでボタンが押せず,プログラムの実行ができません. [答え]
  • 「コンパイル」,「ビルド」,「リビルド」の違いを教えてください. [答え]
  • 「実行」と「デバッグ実行」の違いを教えてください. [答え]
  • デバッグ実行時の「ステップオーバー」と「ステップイン」の違いを教えてください. [答え]
  • 実行時の引数を設定できますか? [答え]
  • プログラムの実行時診断(実行時エラーの検出)機能を使うにはどうすれば良いですか? [答え]
  • メモリリークがあるかどうかを調べる方法を教えてください. [答え]
  • プログラムの最適化(-On )を行うにはどうすれば良いですか? [答え]
  • 固定形式のプログラム(*.f, *.for)を自由形式のプログラム(*.f90)に変換できますか? [答え]
  • ソースプログラムの整形機能(C で言うところの cb の様な機能)はありますか? [答え]
  • コールグラフとは何ですか? [答え]
  • ターミナル(コマンドライン)からコンパイラを単体で使用することはできますか? [答え]
  • Fortran Builder には,連立一次方程式,線形最小二乗問題,固有値問題などが扱える数値計算ライブラリはバンドルされていますか? [答え]
  • C の main 関数から Fortran の手続(サブルーチン,関数)を呼べますか? [答え]
  • 混合言語プログラミング時の f90_init と f90_io_finish という関数は何ですか? [答え]
  • Fortran 77 のプログラムをコンパイルするには,何らかのコンパイラオプションを指定する必要がありますか? [答え]
  • Fortran Builder が私の古い(レガシーな)Fortran 77 のプログラムを受け付けてくれません. [答え]
  • Fortran 77 と Fortran 90/95 のソースファイルが混在しているプロジェクトなのですが,コンパイルは大丈夫でしょうか? [答え]
  • CDABS(A),DCMPLX(X,Y),DCONJG(Z),DIMAG(Z),DREAL(Z) はどうすれば利用できますか? [答え]
  • 関数 getarg はありますか? [答え]
  • 関数 getenv はありますか? [答え]
  • 関数 flush はありますか? [答え]
  • 関数 system はありますか? [答え]
  • 関数 fdate を含むプログラムのコンパイルができません. [答え]
  • 関数 dtime や etime を含むプログラムのコンパイルができません. [答え]
  • 「TAB 書式入力です」という警告メッセージが出ます. [答え]
  • 「数値データ型にバイト数が指定されました」という警告メッセージが出ます. [答え]
  • 「KIND 値 (*) が有効な表現方法ではありません」というエラーが出てプログラムがコンパイルできません.他のコンパイラでは問題なく動いているプログラムです. [答え]
  • 「入力バッファにおいてレコードが長すぎます」または「出力においてバッファオーバーフローが発生しました」というエラーはどういうことでしょうか? [答え]
  • 実行ファイルを他のマシンで実行しようとするとエラーが出て実行ができません.Fortran Builder では,正しく実行できていたプログラムです.
    ( "dyld: Library not loaded: /usr/local/lib/nAG_Fortran/libf60rts.dylib" といったメッセージが表示されます.) [答え]
  • 「警告:浮動小数アンダーフローが発生しました」という警告メッセージがプログラムの実行時に出ます. アンダーフローがどこで発生したかを調べる方法はありますか? [答え]
  • 「警告:浮動小数アンダーフローが発生しました」という警告メッセージがプログラムの実行時に出ます. この警告メッセージの出力を抑止することはできますか? [答え]
  • 4倍精度をサポートしていますか? [答え]
  • 編集記述子 $(改行抑止)はサポートしていないのですか? [答え]
  • Fortran Builder で作成したアプリケーションの再配布は可能ですか? [答え]
  • Fortran の組込み関数(例えば CDEXP)をコンパイラが認識しません(コンパイルに通りません). [答え]
  • RANDOM_SEED で初期化した(シードを設定した)後に RANDOM_NUMBER で乱数を生成したのですが,出力結果が明らかにランダムではありません.RANDOM_SEED の正しい使い方を教えてください. [答え]
  • 「Undefined symbols for architecture x86_64: "_main", referenced from: ...」というリンクエラーが出てプログラムがビルドできません. [答え]
  • 「実行時エラー: *** 算術例外: 浮動小数ゼロ除算 - 終了します」というエラーが出て実行が途中で止まります. [答え]
  • Fortran Builder をデフォルト(出荷時の状態)に戻すことはできますか? [答え]
  • デバッグ実行を行うと「ユーザ名」と「パスワード」を求められます。どうすれば良いですか? [答え]
  • アンインストールの方法を教えてください。 [答え]

質問 Fortran Builder は OS X のどのバージョンに対応していますか?
答え
◇ macOS X 10.14 Mojave
◇ macOS X 10.13 High Sierra
◇ macOS X 10.12 Sierra
◇ OS X 10.11 El Capitan
◇ OS X 10.10 Yosemite
◇ OS X 10.9 Mavericks

以上のバージョンに対応しています.

OS X 10.8 (Mountain Lion) 以前では正常動作しませんのでご注意ください.


質問 USB キーを破損してしまいました.新しい USB キーを貰えますか?
答え

年間保守サービスにご加入いただいているお客様には無償にてご対応いたします.
(年間保守サービスにご加入いただいていない場合は製品の再購入となります.)

破損した USB キーを日本 nAG(株)にお送りいただいた後,新しい USB キーをお客様にお送り致します.
破損した USB キーをご自身で廃棄されませんようお願い致します.

ご希望の際は,日本 nAG(株)までお気軽にお問い合わせください.

※ USB キーの紛失には対応しておりません.
USB キーを紛失された場合は製品の再購入となりますのでご注意ください.


質問 フローティングライセンスなど,USB キー以外のライセンス形態での利用は可能ですか?
答え

はい,以下のライセンス形態でのご利用も可能です.

◇ フローティングライセンス
◇ サイトライセンス
◇ ノードロックライセンス

上記のライセンス形態をご希望のお客様は,日本 nAG(株)までお気軽にお問い合わせください.

注意:
ノードロックライセンスは1ライセンスにつき特定の1台のマシンに対してのみ有効なテキストファイル形式のライセンスです.
ノードロックライセンスキーを発行した後にマシンの変更は行えませんので予めご了承ください.
ご利用のマシンに USB ポートが無いなどの特別な理由がない限りは USB キーでのご利用をお勧めします.


質問 プロジェクトとは何ですか?
答え

Fortran Builder ではユーザープログラムをプロジェクトという単位で管理します.
プロジェクトには実行ファイルを作成するために必要な一連のファイル(ソースファイルおよびコンパイル後に生成されるオブジェクトファイルやモジュールファイルなど)が含まれます.

プロジェクトを作成することはワークフォルダを作成することに似ています.
プロジェクトを作成した後に,実行ファイルを作成するために必要なソースファイルをその中に追加して,プログラムをビルド(コンパイル・リンク)するイメージです.

補足:
Fortran Builder の基本的な使用手順は以下のようになります.

1. 新規にプロジェクトを作成する(または,既存のプロジェクトを開く).
2. 新規の(または,既存の)ソースファイルをプロジェクトに追加する.
3. ソースファイルを編集する(ソースプログラムを書く).
4. ソースファイルをビルド(コンパイル・リンク)する.
※ ビルドに通らなかった場合は 3 に戻る.
5. 実行ファイルを実行する.

注意:
1つの実行ファイルに対して1つのプロジェクトが対応します.
従って,1つのプロジェクトに対して主プログラムが複数存在してはいけません.


質問 プロジェクトは必ず作らなければいけないのですか?
答え

プログラムが単一のソースファイルの場合は,プロジェクトを作成することなくソースファイルを新規作成する(または,既存のソースファイルを開く)ことで,そのままビルド・実行を行う事が可能です.
Fortran Builder では,この機能を「クイック実行」機能と呼んでいます.

Fortran Builder はプロジェクトを開いていない状態では常にこのクイック実行モードとなっています.
(これに対して,プロジェクトを開いている状態をプロジェクト実行モードと呼びます.)

クイック実行は単一のソースファイルに対しての機能となりますので,複数のソースファイルが開かれている場合は,編集エリアでアクティブになっているソースファイルがビルド・実行の対象となります.

実行ファイル(その他,オブジェクトファイルなどの実行ファイルを生成するために必要な一連のファイル)は,対象ソースファイルが置かれているフォルダに生成されます.

これに対して,複数のソースファイルをビルド・実行する場合は,プロジェクトを作成する必要があります.

クイック実行については Fortran Builder ヘルプ「プロジェクトなしで実行する(クイック実行)」も併せてご参照ください.


質問 「duplicate symbol _main in:」というリンクエラーが出てプログラムがビルドできません.
答え

これは1つのプロジェクトに対して複数の主プログラムが存在しているために出ているリンクエラーです.

1つの実行ファイルに対して1つのプロジェクトが対応します.
従って,1つのプロジェクトに対して主プログラムが複数存在してはいけません.


質問 「実行」ボタンが灰色のままでボタンが押せず,プログラムの実行ができません.
答え

プログラムが実行中になっていませんか?
プログラムの編集,ビルド,実行は, 実行中のプログラムを終了させてから行ってください.


質問 「コンパイル」,「ビルド」,「リビルド」 の違いを教えてください.
答え

「コンパイル 」は編集エリアでアクティブになっている単一のソースファイルを対象にコンパイルを行います.

「ビルド」はコンパイルとリンクを行います.
特に変更があったソースファイルのみをコンパイル対象とします.

※ オブジェクトファイルの無いまっさらな状態では,すべてのソースファイルに対してコンパイル・リンクを行います.
※ すべてのソースファイルがコンパイル済みであり(つまり全てのオブジェクトファイルがある)かつソースファイルに変更がない場合は,リンクのみを行います.
※ すべてのソースファイルがコンパイル・リンク済みであり(つまり全てのオブジェクトファイルと実行ファイルがある)かつソースファイルに変更がない場合は,何も行いません.

「リビルド」はクリーンとビルドを行います.
クリーンはオブジェクトファイルと実行ファイルを削除し,ビルド環境をソースファイルのみの状態に戻します.
従って,すべてのソースファイルがビルドし直されます.

補足:
プログラムを機械語に翻訳して実行ファイルを作成するためには,以下の2つの独立したステップが必要になります.

1. コンパイル
ソースプログラム(*.f90 など)を機械語に変換し,オブジェクトファイル(*.o)を生成します.
2. リンク
複数のオブジェクトファイル(*.o)(および,外部ライブラリなど)を結合し,実行ファイルを生成します.

質問 「実行」と「デバッグ実行」の違いを教えてください.
答え

プログラムを「デバッグ実行」すると,裏でデバッガーが起動し,ブレークポイントを設定した箇所でプログラムの実行が一時停止します.
そして,その時点での変数の値の確認/変更やその後のステップ実行が行えるようになります.
また,ブレークポイントでプログラムが一時停止した状態から再度「デバッグ実行」を行うと,次のブレークポイントまで実行が行われ一時停止します.

それに対して「実行」は,ブレークポイントを設定した箇所でプログラムの実行を中断することなく,プログラムを通常通り実行するものです.

補足:
ブレークポイントとはプログラムの実行を一時停止する場所を示すものです.
ブレークポイントを設定するには設定したい行の左端をクリックしてください.
同様に,ブレークポイントを解除するには解除したい行の左端をクリックしてください.


質問 デバッグ実行時の「ステップオーバー」と「ステップイン」の違いを教えてください.
答え

「ステップオーバー」と「ステップイン」は,デバッグ実行時にプログラムが一時停止した状態からプログラムを1行ずつ実行します.
両者が異なるのは実行箇所が手続(サブルーチン,関数)を呼び出している時です.
「ステップオーバー」は手続を処理した後に次の行で一時停止します.
「ステップイン」は手続の中の1行目で一時停止します.


質問 実行時の引数を設定できますか?
答え

はい,可能です.
実行時の引数は Fortran Builder メニュー「実行 > 実行時の引数」から設定することができます.

(設定例: 入出力リダイレクション)

< input.txt > output.txt

質問 プログラムの実行時診断(実行時エラーの検出)機能を使うにはどうすれば良いですか?
答え

プログラムの実行時診断(実行時エラーの検出)機能を有効にするには,Fortran Builder メニュー「プロジェクト > プロジェクトの設定 > Fortran コンパイラ > 実行時診断 > 実行時診断オプション (-C=)」を設定してください.

「標準」はコンパイラオプション -C に相当し,「ダングリングポインタ (=dangling)」,「整数オーバーフロー (=intovf)」,「未定義の変数 (=undefined)」を除く全てのチェック項目が有効になります.

「全部」はコンパイラオプション -C=all に相当し,「未定義の変数 (=undefined)」を除く全てのチェック項目が有効になります.

「オプション選択」はコンパイラオプション -C=check に相当し,チェック項目(check )を選択できます.

※ オプションの詳細は Fortran Builder ヘルプ「nAG Fortran Compiler, Release 6.2 マニュアル - 2.4 コンパイラオプション」をご参照ください.

Fortran Builder は検出された実行時エラーのメッセージをメッセージウィンドウに出力します.

補足:
Fortran 標準に従って検出される通常の実行時エラーは,上記オプションの指定に関係なく検出されます.


質問 メモリリークがあるかどうかを調べる方法を教えてください.
答え

プログラムのメモリトレース(メモリリークの検出)機能を有効にするには,Fortran Builder メニュー「プロジェクト > プロジェクトの設定 > Fortran コンパイラ > 実行時診断 > メモリトレースオプション (-mtrace=)」を設定してください.

「全部」はコンパイラオプション -mtrace=all に相当し,全ての詳細設定が有効になります.

「オプション選択」はコンパイラオプション -C=trace_opt_list に相当し,詳細設定(trace_opt_list )を選択できます.

※ オプションの詳細は Fortran Builder ヘルプ「nAG Fortran Compiler, Release 6.2 マニュアル - 2.4 コンパイラオプション」をご参照ください.

「ファイル出力と IDE 表示」にチェックを入れますと,メモリトレースの結果がテキストファイル fbrmtrace.log に書き出され,編集エリアに表示されます(チェックを入れない場合は,標準出力へ出力されます).

(メモリ診断の出力例)

 3 allocations
 No memory leaked

[Allocated item 1 (size 1025) = Z'2BB0010']
[Allocated item 2 (size 1025) = Z'2BB0430']
[Allocated item 3 (size 1025) = Z'2BB0850']
[Deallocated item 2 (size 1025, at Z'2BB0430')]
[Deallocated item 3 (size 1025, at Z'2BB0850')]
[Deallocated item 1 (size 1025, at Z'2BB0010')]

注意:
このオプションは「自動的ガーベージコレクションを有効にする (-gc)」オプション(コンパイラオプション -gc に相当)と互換性がありません.
両方のオプションにチェックが入っているとコンパイルエラーとなります.


質問 プログラムの最適化(-On )を行うにはどうすれば良いですか?
答え

プログラムの最適化は Fortran Builder メニュー「プロジェクト > プロジェクトの設定 > 基本設定 > 最適化設定」を指定してください.
これはコンパイラオプション -Onn は最適化レベル 0 ~ 4)に相当します.

Fortran Builder(nAG Fortran Compiler)はデフォルトでは「最適化なし」(-O0 に相当)が設定されています.

※ オプションの詳細は Fortran Builder ヘルプ「nAG Fortran Compiler, Release 6.2 マニュアル - 2.4 コンパイラオプション」をご参照ください.


質問 固定形式のプログラム(*.f, *.for)を自由形式のプログラム(*.f90)に変換できますか?
答え

はい,可能です.
Fortran Builder メニュー「ツール > ソース整形の実行」をご利用ください.
Fortran Builder メニュー「ツール > 設定 > ソース整形の設定」で整形内容 (インデント幅や文番号の再設定など)を細かく指定できます.

ソース整形は編集エリアでアクティブになっているソースファイルが対象となります.
特に対象となるソースファイルが固定形式(拡張子が *.f, *.for 例えば abc.f)の場合は,整形結果として自由形式のソースファイル(拡張子が *.f90 例えば abc.f90)が別途作成されます(元の固定形式のソースファイル(例えば abc.f)はそのまま残ります).

注意:
ソース整形は元のプログラムが Fortran Builder(nAG Fortran Compiler)でコンパイルに通るプログラムであること(つまり正しい Fortran のプログラムであること)が前提となります.


質問 ソースプログラムの整形機能(C で言うところの cb の様な機能)はありますか?
答え

はい,ございます.
Fortran Builder メニュー「ツール > ソース整形の実行」をご利用ください.
Fortran Builder メニュー「ツール > 設定 > ソース整形の設定」で整形内容 (インデント幅や文番号の再設定など)を細かく指定できます.

ソース整形は編集エリアでアクティブになっているソースファイルが対象となります.
特に対象となるソースファイルが固定形式(拡張子が *.f, *.for 例えば abc.f)の場合は,整形結果として自由形式のソースファイル(拡張子が *.f90 例えば abc.f90)が別途作成されます(元の固定形式のソースファイル(例えば abc.f)はそのまま残ります).

注意:
ソース整形は元のプログラムが Fortran Builder(nAG Fortran Compiler)でコンパイルに通るプログラムであること(つまり正しい Fortran のプログラムであること)が前提となります.


質問 コールグラフとは何ですか?
答え

コールグラフとは,コンピュータプログラムの手続間の呼び出し関係を表現した有向グラフです.

Fortran Builder には「コールグラフの表示」機能が搭載されており,Fortran プログラム(主プログラム,外部副プログラム,モジュール)の手続(サブルーチン,関数)間の呼び出し関係をテキストファイル callgraph.txt に出力します.
この機能は Fortran Builder メニュー「ツール > コールグラフの表示」からご利用いただけます.

(コールグラフの出力例)

コールグラフ 2014年10月22日 9:43

    1: MAIN
    2:     HELLO


コールグラフの索引

   行    手続
    2    HELLO
    1    MAIN


呼び出しテーブル

  手続       呼び出し元
  HELLO      MAIN

質問 ターミナル(コマンドライン)からコンパイラを単体で使用することはできますか?
答え

はい,ターミナル(コマンドライン)からコンパイラ(nAG Fortran Compiler)を単体で使用することも可能です.

◇ 使用方法(コマンド)

nagfor [オプション] ... ファイル ...

※ 詳細は Fortran Builder ヘルプ「nAG Fortran Compiler, Release 6.2 マニュアル - 2 コンパイラの使用」をご参照ください.

◇ 簡単な使用例

1. プログラム(myprog.f90)を作成する.

program main
  print *, 'Hello World'
end program

2. プログラム(myprog.f90)をコンパイル・リンクする.

nagfor -o hello myprog.f90

※ オプションの詳細は Fortran Builder ヘルプ「nAG Fortran Compiler, Release 6.2 マニュアル - 2.4 コンパイラオプション」をご参照ください.

3. 作成された実行ファイル(hello)を実行する.

./hello

質問 Fortran Builder には,連立一次方程式,線形最小二乗問題,固有値問題などが扱える数値計算ライブラリはバンドルされていますか?
答え

はい,線形代数用の数値計算ライブラリとして標準的な BLAS (Basic Linear Algebra Subprograms) と LAPACK (Linear Algebra PACKage) がバンドルされています.

Fortran Builder メニュー「プロジェクト > プロジェクトの設定 > 基本設定 > 追加ライブラリ > LAPACK を利用する」を指定してください.
ライブラリルーチンを利用できるようになります(リンク時にライブラリがリンクされます).


質問 C の main 関数から Fortran の手続(サブルーチン,関数)を呼べますか?
答え

はい,Fortran Builder では,C/C++ で main 関数から Fortran の手続(サブルーチン,関数)を呼び出すことや,また逆に Fortran の主プログラムから C/C++ の関数を呼び出すことが可能です.

具体例としましては,コンソールアプリケーションのテンプレート「カテゴリ:Hello World」(「例題一覧:Hello World(C メイン,Fortran サブ)」など)をご参照ください.


質問 混合言語プログラミング時の f90_init と f90_io_finish という関数は何ですか?
答え

メインプログラムが C/C++ の場合には,f90_init を C/C++ から呼び出す必要があります.
この関数は Fortran の浮動小数点環境の初期化を行うと共に,Fortran の UNIX モジュールがコマンドライン引数にアクセスすることを可能にします.
また,最後には後処理関数 f90_io_finish を呼び出し,バッファをフラッシュしてから処理を終了する必要があります.

一般的に C から Fortran を呼び出す際の C プログラム側の記述は以下の通りです.

int main(int argc, char *argv[])
{
  f90_init(argc, argv); 

  /* ここに Fortran 呼び出し処理を記述する */

  f90_io_finish();

  return 0;
}

質問 Fortran 77 のプログラムをコンパイルするには,何らかのコンパイラオプションを指定する必要がありますか?
答え

いいえ,特にコンパイラオプションを指定する必要はありません.

Fortran Builder(nAG Fortran Compiler)は Fortran 77 の規格を含む Fortran 標準に従ってコンパイルを行います.
ただし,ファイルの拡張子によってプログラム形式(固定形式か自由形式か)の区別は行います.
拡張子が *.f, *.for, *.ftn のファイルに対しては固定形式のプログラムとしてコンパイルを行い,拡張子が *.f90, *.f95 のファイルに対しては自由形式のプログラムとしてコンパイルを行います.

補足:
特に,拡張子に関係なく全てのソースファイルを固定形式でコンパイルしたい場合は Fortran Builder メニュー「プロジェクト > プロジェクトの設定 > Fortran コンパイラ > 詳細設定 (1) > 固定形式を強制する (-fixed)」(コンパイラオプション -fixed に相当)を指定してください.
また,拡張子に関係なく全てのソースファイルを自由形式でコンパイルしたい場合は Fortran Builder メニュー「プロジェクト > プロジェクトの設定 > Fortran コンパイラ > 詳細設定 (1) > 自由形式を強制する (-free)」(コンパイラオプション -free に相当)を指定してください.

注意:
コンパイラオプション -fixed と -free の両方が指定された場合は -free が優先されます.


質問 Fortran Builder が私の古い(レガシーな)Fortran 77 のプログラムを受け付けてくれません.
答え

Fortran Builder(nAG Fortran Compiler)はプログラムが Fortran 標準に準拠しているかどうか厳しいチェックを行います.
新たなプログラムを作成する場合これはコンパイラのあるべき姿とも言えますが,昔書かれたプログラム(レガシーコード)をコンパイルしたい場合など厳しいチェックを望まない場合もあります.
このため Fortran Builder(nAG Fortran Compiler)では,厳しいチェックを行わないことを指示するためのコンパイラオプションが用意されています.

Fortran Builder メニュー「プロジェクト > プロジェクトの設定 > Fortran コンパイラ > 基本設定 > 古典的ソースコードのエラーを警告にする (-dusty)」(コンパイラオプション -dusty に相当)を指定してください.
これにより,レガシーコードに良く見られるエラーを警告として扱うようになり,コンパイルが続行できます.

さらに必要であれば Fortran Builder メニュー「プロジェクト > プロジェクトの設定 > Fortran コンパイラ > 基本設定 > 警告表示選択 > 全て非表示」(コンパイラオプション -w に相当)を指定して警告の出力を抑止することも可能です.


質問 Fortran 77 と Fortran 90/95 のソースファイルが混在しているプロジェクトなのですが,コンパイルは大丈夫でしょうか?
答え

はい,大丈夫です.

Fortran Builder(nAG Fortran Compiler)は Fortran 77 の規格を含む Fortran 標準に従ってコンパイルを行います.
ただし,ファイルの拡張子によってプログラム形式(固定形式か自由形式か)の区別は行います.
拡張子が *.f, *.for, *.ftn のファイルに対しては固定形式のプログラムとしてコンパイルを行い,拡張子が *.f90, *.f95 のファイルに対しては自由形式のプログラムとしてコンパイルを行います.

補足:
特に,拡張子に関係なく全てのソースファイルを固定形式でコンパイルしたい場合は Fortran Builder メニュー「プロジェクト > プロジェクトの設定 > Fortran コンパイラ > 詳細設定 (1) > 固定形式を強制する (-fixed)」(コンパイラオプション -fixed に相当)を指定してください.
また,拡張子に関係なく全てのソースファイルを自由形式でコンパイルしたい場合は Fortran Builder メニュー「プロジェクト > プロジェクトの設定 > Fortran コンパイラ > 詳細設定 (1) > 自由形式を強制する (-free)」(コンパイラオプション -free に相当)を指定してください.

注意:
コンパイラオプション -fixed と -free の両方が指定された場合は -free が優先されます.


質問 CDABS(A),DCMPLX(X,Y),DCONJG(Z),DIMAG(Z),DREAL(Z) はどうすれば利用できますか?
答え

CDABS などの組込み関数は Fortran 標準の組込み関数ではありませんが,多くのコンパイラがこれら Fortran 非標準の組込み関数をサポートしています.

Fortran Builder(nAG Fortran Compiler)では Fortran 標準に準拠するために,Fortran 非標準の倍精度複素数組込み手続は Fortran Builder メニュー「プロジェクト > プロジェクトの設定 > Fortran コンパイラ > 基本設定 > 非標準の倍精度複素数組込み関数を有効にする (-dcfuns)」(コンパイラオプション -dcfuns に相当)を指定した時にのみ利用可能となっています.


質問 関数 getarg はありますか?
答え

はい,Fortran Builder(nAG Fortran Compiler)は多くの POSIX システムコールを独自の組込みモジュールで提供しています.
これらにアクセスするためには,該当するモジュールを use 文により指定する必要があります.
getarg はモジュール f90_unix_env においてサブルーチンとして提供されます.
詳細は Fortran Builder ヘルプ「nAG Fortran Compiler, Release 6.2 マニュアル - 7.4 f90_unix_env」をご参照ください.

しかしながら Fortran 標準準拠の観点からは,Fortran 2003 から導入された組込みサブルーチン get_command_argument の利用が推奨されます.
組込みサブルーチン get_command_argument を利用したプログラム例を以下に示します.

program main
  implicit none
  integer :: i, length, status
  character(:), allocatable :: arg
  intrinsic :: command_argument_count, get_command_argument
  !
  ! Display all command-line arguments.
  !
  do i = 0, command_argument_count()
    call get_command_argument(i, length = length, status = status)
    if (status == 0) then
      !
      ! Allocate "arg" to the correct length.
      !
      allocate (character(length) :: arg)
      call get_command_argument(i, arg, status = status)
      if (status == 0) then
        !
        ! Retrieved ok, display it.
        !
        if (i == 0) then
          print *, 'Command = "', arg, '"'
        else
          print *, 'Argument', i, '= "', arg, '"'
        end if
      end if
      deallocate (arg)
    end if
    !
    ! If we got some kind of error, display the error message.
    !
    if (status /= 0) print *, 'Error', status, 'on argument', i
  end do
end program

質問 関数 getenv はありますか?
答え

はい,Fortran Builder(nAG Fortran Compiler)は多くの POSIX システムコールを独自の組込みモジュールで提供しています.
これらにアクセスするためには,該当するモジュールを use 文により指定する必要があります.
getenv はモジュール f90_unix_env においてサブルーチンとして提供されます.
詳細は Fortran Builder ヘルプ「nAG Fortran Compiler, Release 6.2 マニュアル - 7.4 f90_unix_env」をご参照ください.

しかしながら Fortran 標準準拠の観点からは,Fortran 2003 から導入された組込みサブルーチン get_environment_variable の利用が推奨されます.
組込みサブルーチン get_environment_variable を利用したプログラム例を以下に示します.

program main
  !
  ! This program displays the values of some environment variables;
  ! if they do not exist, that fact is displayed.
  !
  implicit none
  call show('FRED')
  call show('USER')
  call show('USERNAME')
contains
  subroutine show(name)
    character(*), intent(in) :: name
    character(:), allocatable :: value
    integer len, status
    intrinsic get_environment_variable
    call get_environment_variable(name, status = status, length = len)
    if (status == 1) then
      print *, 'Environment variable "', name, '" does not exist.'
    else if (status /= 0) then
      print *, 'Error', status, 'for environment variable "', name, '"'
    else
      allocate (character(len) :: value)
      call get_environment_variable(name, value = value)
      print *, 'Environment variable "', name, '" has the value "', value, '".'
    end if
  end subroutine
end program

質問 関数 flush はありますか?
答え

はい,Fortran Builder(nAG Fortran Compiler)は多くの POSIX システムコールを独自の組込みモジュールで提供しています.
これらにアクセスするためには,該当するモジュールを use 文により指定する必要があります.
flush はモジュール f90_unix_io においてサブルーチンとして提供されます.
詳細は Fortran Builder ヘルプ「nAG Fortran Compiler, Release 6.2 マニュアル - 7.7 f90_unix_io」をご参照ください.

しかしながら Fortran 標準準拠の観点からは,Fortran 2003 から導入された flush 文の利用が推奨されます.
flush 文を利用したプログラム例を以下に示します.

program slow_dots
  !
  ! This program prints 10 dots, one per second, then finishes.
  !
  use iso_fortran_env, only : output_unit
  implicit none
  integer i
  do i = 1, 10
    write (*, '(a)', advance = 'no') '.'
    call delay
    flush (output_unit)
  end do
  print *, 'Done.'
contains
  subroutine delay
    integer cps,start,now
    intrinsic system_clock
    call system_clock(count = start, Count_Rate = cps)
    if (start == -huge(start)) stop 'No clock.'
    do
      call system_clock(count = now)
      if (now < start .or. now >= start + cps) exit
    end do
  end subroutine
end program

質問 関数 system はありますか?
答え

はい,Fortran Builder(nAG Fortran Compiler)は多くの POSIX システムコールを独自の組込みモジュールで提供しています.
これらにアクセスするためには,該当するモジュールを use 文により指定する必要があります.
system はモジュール f90_unix_proc においてサブルーチンとして提供されます.
詳細は Fortran Builder ヘルプ「nAG Fortran Compiler, Release 6.2 マニュアル - 7.8 f90_unix_proc」をご参照ください.

しかしながら Fortran 標準準拠の観点からは,Fortran 2008 から導入された組込みサブルーチン execute_command_line の利用が推奨されます.
組込みサブルーチン execute_command_line を利用したプログラム例を以下に示します.

program execute_example
  implicit none
  call execute_command_line('echo hello execute')
end program

質問 関数 fdate を含むプログラムのコンパイルができません.
答え

関数 fdate は Fortran 標準の機能ではありません.
代わりに Fortran 標準の組込みサブルーチン date_and_time を以下のプログラム例を参考にご利用ください.

program date_time
  character date*8, time*10 
  call date_and_time(date, time) 
  print *, date, ' ', time 
end program

質問 関数 dtime や etime を含むプログラムのコンパイルができません.
答え

関数 dtime や etime は Fortran 標準の機能ではありません.
代わりに Fortran 標準の組込みサブルーチン cpu_time や system_clock を以下のプログラム例「代替その1」を参考にご利用ください.
なお「代替その2」はそれぞれ Fortran Builder(nAG Fortran Compiler)独自の組込みモジュール f90_unix_env で提供される関数 times を利用したものとなります.

(dtime の代替その1)

real function dtime(time)
  real time(2)
  double precision, save :: last_time = 0
  double precision this_time
  call cpu_time(this_time)
  time(1) = this_time - last_time
  time(2) = 0
  dtime = time(1)
  last_time = this_time
end function

(dtime の代替その2)

real function dtime(time)
  use f90_unix_env, only : tms, times
  real time(2)
  type(tms), save :: lastbuf
  logical :: start = .true.
  type(tms) buffer
  integer junk
  junk = times(buffer)
  if (start) then
    lastbuf%utime = 0
    lastbuf%stime = 0
    start = .false.
  end if
  time(1) = buffer%utime - lastbuf%utime
  time(2) = buffer%stime - lastbuf%stime
  dtime = time(1) + time(2)
  lastbuf = buffer
end function

(etime の代替その1)

real function etime(time)
  real time(2)
  call cpu_time(etime)
  time(1) = etime
  time(2) = 0
end function

(etime の代替その2)

real function etime(time)
  use f90_unix_env, only : tms, times
  real time(2)
  type(tms) buffer
  integer junk
  junk = times(buffer)
  time(1) = buffer%utime
  time(2) = buffer%stime
  etime = buffer%utime + buffer%stime
end function

質問 「TAB 書式入力です」という警告メッセージが出ます.
答え

TAB 書式は Fortran 標準では拡張機能に位置づけられます.
このため,このような警告メッセージが出力されます.
TAB 書式は新しくプログラムを作成する場合には推奨されていない形式です.


質問 「数値データ型にバイト数が指定されました」という警告メッセージが出ます.
答え

integer*2 の様な書式で変数のバイト数を指定する方法は Fortran 標準では拡張機能に位置づけられます.
このため,このような警告メッセージが出力されます.

この警告メッセージを抑止したい場合は,Fortran Builder メニュー「プロジェクト > プロジェクトの設定 > Fortran コンパイラ > 基本設定 > 警告表示選択 > 表示抑止する警告を選択」を指定した後に「Fortran 77 の拡張仕様 (=x77)」(コンパイラオプション -w=x77 に相当)を指定してください.

なお Fortran Builder(nAG Fortran Compiler)では以下のバイト数指定を受け付けます.

real*4     !単精度実数
real*8     !倍精度実数
complex*8  !単精度複素数
complex*16 !倍精度複素数
logical*1  !1バイト論理
logical*2  !2バイト論理
logical*4  !4バイト論理
logical*8  !8バイト論理
integer*1  !1バイト整数
integer*2  !2バイト整数
integer*4  !4バイト整数
integer*8  !8バイト整数

この書式は新しくプログラムを作成する場合には推奨されていない形式です.
新しくプログラムを作成する場合は,例えば以下のような書き方を推奨します.

integer, parameter :: int8   = selected_int_kind(2)
integer, parameter :: int16  = selected_int_kind(4)
integer, parameter :: int32  = selected_int_kind(9)
integer, parameter :: int64  = selected_int_kind(18)
integer, parameter :: real32 = selected_real_kind(6)
integer, parameter :: real64 = selected_real_kind(15)

などとした上で,例えば 8-bit 整数を使用する場合には以下のようにします.

integer(int8)

また 32-bit(単精度)実数を使用する場合には以下のようにします.

real(real32)

更に定数の指定も,例えば以下のように行うことが可能です.

3.141592653589793238_real64

質問 「KIND 値 (*) が有効な表現方法ではありません」というエラーが出てプログラムがコンパイルできません.他のコンパイラでは問題なく動いているプログラムです.
答え

コンパイラによって kind 値の解釈が異なるために出ているエラーです.

多くのコンパイラは kind 値がデータバイト数を表す方法(バイト指定)か,もしくは1番から順番に値を割り振る方法(シーケンシャル指定)のどちらかを採用しています.
Fortran Builder(nAG Fortran Compiler)では,後者の順番に割り振る方法(シーケンシャル指定)をデフォルトで採用しているため,データバイト数を表す方法(バイト指定)で書かれたプログラムはこのようなエラーとなります.

Fortran Builder(nAG Fortran Compiler)では,コンパイラオプションの指定で kind 値にデータバイト数を利用することが可能です.
Fortran Builder メニュー「プロジェクト > プロジェクトの設定 > Fortran コンパイラ > 詳細設定 (1) > Kind モード (-kind=) > バイト (=byte)」(コンパイラオプション -kind=byte に相当)を指定してください.

移植性を考えたコードを作成する場合には,real(4) などと直接 kind 値の指定を行わずに,例えば real(kind(1.0)) などと kind 組込み関数を利用した表現を推奨します.


質問 「入力バッファにおいてレコードが長すぎます」または「出力においてバッファオーバーフローが発生しました」というエラーはどういうことでしょうか?
答え

これはファイルバッファの大きさを超えて formatted 入力または出力が行われたことを意味します.
デフォルトのバッファサイズは 1024 文字です.
これをより大きくする場合には open 文で「recl=バッファサイズ」と指定してください.

open (13, file = "myfile", form = "formatted", recl = 2048)

この例では,バッファサイズを 2048 文字に拡張しています.
また,iolength 指定子を inquire 文で指定して recl 指定子に必要なサイズを求める事ができます.

inquire (iolength = irecl) my_big_array
open (13, file = "dump", form = "formatted", recl = irecl)

この例では,装置 13 に my_big_array を読み書きするのに必要なサイズを設定しています.


質問 実行ファイルを他のマシンで実行しようとするとエラーが出て実行ができません.Fortran Builder では正しく実行できていたプログラムです.
( "dyld: Library not loaded: /usr/local/lib/nAG_Fortran/libf60rts.dylib" といったエラーが表示されます.)
答え

Fortran Builder メニュー「プロジェクト > プロジェクトの設定 > リンク > Fortran リンクオプション > Fortran ランタイムライブラリの非共有(静的)バージョンの結合 (-unsharedrts)」(コンパイラオプション -unsharedrts に相当)にチェックを入れて,再度ビルドを行ってください.

このオプションを指定しますと,nAG Fortran Compiler の実行時ライブラリがスタティックリンクされます.
これにより Fortran Builder(nAG Fortran Compiler)がインストールされていないマシンにおいても,実行ファイルを実行させることが可能になります.

※ オプションの詳細は Fortran Builder ヘルプ「nAG Fortran Compiler, Release 6.2 マニュアル - 2.4 コンパイラオプション」をご参照ください.

※ Fortran Builder のプロジェクト設定(またはクイック実行設定)はデフォルトではオプション -unsharedrts にチェックが入っていません

または,実行時ライブラリをスタティックリンクしたくない場合(つまり,オプション -unsharedrts を付けない場合)は,実行ファイルと共に実行時ライブラリが必要となります.

その場合,以下の実行時ライブラリをコピーしてご利用ください.

64-bit アプリケーション(実行ファイル)の場合:

/usr/local/lib/nAG_Fortran/libf60rts.dylib

32-bit アプリケーション(実行ファイル)の場合:

/usr/local/lib/nAG_Fortran/x86_32/libf60rts.dylib


質問 「警告:浮動小数アンダーフローが発生しました」という警告メッセージがプログラムの実行時に出ます.
アンダーフローがどこで発生したかを調べる方法はありますか?
答え

以下に手順を示します.

1. コンパイラモジュールの設定

弊社コンパイラが提供するモジュール

ieee_arithmetic

を use してください.引き続き,サブルーチン

ieee_set_halting_mode(ieee_underflow, .true.) 

を call してください.

2. コンパイラオプションの設定

FB メニューバー「プロジェクト > プロジェクトの設定 > Fortran コンパイラ > 詳細設定 (1)」

を開いてください.コンパイラオプション

「実行時エラーメッセージの出力時にトレースバック情報を出力するコードを生成する (-gline)」

にチェックを入れてください.

これにより,アンダーフローが発生した時点でプログラムが停止すると共に,停止した行番号が出力されます.
以下にプログラム例を示します.

program underflow_example
  use ieee_arithmetic
  implicit none
  real x
  call ieee_set_halting_mode(ieee_underflow, .true.)
  read *, x
  print *, x / huge(x)
  print *, "Hello World"
end program

このプログラムを実行して 0.1 と入力すると Fortran Builder のメッセージウィンドウに以下のようなメッセージが出力されます.

===
実行時エラー: *** 算術例外: 浮動小数アンダーフロー - 終了します
test.f90, line 7: エラーがUNDERFLOW_EXAMPLEで発生しました
===

これにより 7 行目でアンダーフローが発生し,プログラムが停止したことが分かります.

注意:
一般的に,アンダーフローは実行結果に対して致命的な影響を及ぼすケースが少ないため Fortran Builder(nAG Fortran Compiler)では「警告」としてメッセージを出力しています.
ただし,アンダーフローが実行結果に及ぼす影響度はそのプログラム次第となりますし,また,その影響を重大であると考えるかどうかは解析者(プログラマー)次第となります.


質問 「警告:浮動小数アンダーフローが発生しました」という警告メッセージがプログラムの実行時に出ます.
この警告メッセージの出力を抑止することはできますか?
答え

Fortran Builder メニュー「プロジェクト > プロジェクトの設定 > リンク > オプション > アンダーフロー警告の非表示 (-no_underflow_warning)」(コンパイラオプション -no_underflow_warning に相当)にチェックを入れてください.

これにより「警告:浮動小数アンダーフローが発生しました」メッセージの出力を抑止することができます.

注意:
一般的に,アンダーフローは実行結果に対して致命的な影響を及ぼすケースが少ないため Fortran Builder(nAG Fortran Compiler)では「警告」としてメッセージを出力しています.
ただし,アンダーフローが実行結果に及ぼす影響度はそのプログラム次第となりますし,また,その影響を重大であると考えるかどうかは解析者(プログラマー)次第となります.


質問 4倍精度をサポートしていますか?
答え

はい,サポートしています.

Fortran Builder(nAG Fortran Compiler)が提供するデータ型の詳細は Fortran Builder ヘルプ「nAG Fortran Compiler, Release 6.2 マニュアル - 2.16 データ型」をご参照ください.

《 補足1: 変数宣言や定数表現について 》

ポータビリティなどを考えると selected_real_kind 組込み関数を用いて,必要な有効桁数を持つ型の kind 番号を取得する方法が推奨されます.
例えば,以下の例のようなモジュールを利用すると便利です.
(なお 0.1q0 といった表現は Fortran 非標準であるため文法エラーとなります.)

プログラム例:

module my_precision
  implicit none
  ! 有効桁数から種別番号を求めるために selected_real_kind を用いる.
  ! 例えば p = 5 等とすると単精度 p = 15 等とすると倍精度の種別番号が取得される.
  integer, parameter :: wp = selected_real_kind(p = 30)
end module my_precision

program precision
  use my_precision
  implicit none
  real(wp) x     ! wp には指定された有効桁数を持つ型の種別番号が格納される.
  complex(wp) c  ! real と complex で種別番号は対応している.
  x = 0.1_wp     ! このような方法で指定種別の定数表現が可能である.
  c = (0.5_wp, 1.2_wp)
  print *, x
  print *, c
end program

出力例(p = 5):

  0.1000000
(0.5000000,1.2000000)

出力例(p = 15):

  0.1000000000000000
(0.5000000000000000,1.2000000000000000)

出力例(p = 30):

.10000000000000000000000000
(0.5000000000000000000000000,1.20000000000000000000000000)

《 補足2: 組込み関数の個別名について 》

Fortran 標準では4倍精度に対応した個別名は定義されていません.
(例えば qmax といった組込み関数は Fortran 非標準であるため文法エラーとなります.)
4倍精度に対しては常に総称名(例えば max)をご利用ください.
なお今後は4倍精度に限らず(単精度,倍精度に対しても)個別名は使用しないことが推奨されます.


質問 編集記述子 $(改行抑止)はサポートしていないのですか?
答え

サポートしていません.

編集記述子 $(改行抑止)は Fortran 非標準であるため文法エラーとなります.

Fortran 標準では,改行を抑止する場合は write 文において advance = 'no' という指定を行います.
以下にプログラム例を示します.

プログラム例:

program advance_example
  implicit none
  integer age
  write (*, fmt = '(a)', advance = 'no') "Enter your age: " ! 改行なし.
  read *, age
  print *, "Your age is:", age
end program

出力例:

Enter your age: 20
 Your age is: 20

質問 Fortran Builder で作成したアプリケーションの再配布は可能ですか?
答え

はい,可能です.

ダイナミックリンク形式の外部ライブラリを利用している場合には,実行ファイルと共に該当のライブラリが必要となることに注意してください.

アプリケーションの再配布についての詳細は Fortran Builder ヘルプ「アプリケーションの再配布」をご参照ください.

注意:
LAPACK, OpenGL ライブラリの商用利用時のライセンスについては,各ライブラリのコミュニティ(製造・提供元)にお問い合わせ(ご参照・ご確認)ください.
Fortran Builder ではこれらのライブラリを各コミュニティのライセンスに基づき商用利用していますが,ユーザーアプリケーションでの2次利用については弊社は一切の責任を持ちません.


質問 Fortran の組込み関数(例えば CDEXP)をコンパイラが認識しません(コンパイルに通りません).
答え

Fortran 標準の組込み関数には総称名(例えば EXP)と個別名(例えば CEXP)があります.
コンパイルに通らない原因としては Fortran 非標準の(特定のコンパイラが独自にサポートしている)個別名(例えば CDEXP)の使用が考えれます.

解決策としては,個別名の代わりに総称名をご利用ください.
個別名は特定の精度に対応しますが,総称名はご利用のコンパイラがサポートする全ての精度に対応しており,引数の型と同じ型の戻り値を得ることができます.

Fortran 非標準の個別名をリストアップすることは不可能ですが,一般的なルールとして xFUN のような関数の代わりに FUN を使用してください.
ここで x は1文字または複数文字の個別名の接頭辞,FUN は数学関数の名前です.

(良く利用される)数学関数の名前:
ABS, ACOS, ASIN, ATAN, ATAN2, CONJG, COS, COSH, DIM, EXP, LOG, LOG10, MAX, MIN, SIGN, SIN, SINH, SQRT, TAN, TANH

(典型的な)個別名の接頭辞:
C, CD, CQ, D, DC, Q, Z

例えば,個別名 CEXP, DEXP, CDEXP, DCEXP, QEXP, CQEXP, ZEXP はどれも総称名 EXP に置き換えても同じ結果を得ることができます.

いくつかの組込み関数については,ルールが若干異なります.
xINT, xNINT(ここで x は上述した個別名の接頭辞)は,AINT, ANINT に置き換えてください.

接頭辞 C または D で始まる個別名の中には Fortran 標準の個別名(例えば CEXP)もあることに注意してください.
しかし,いずれにせよ現在では(総称名の代わりに)個別名を用いるべき理由は特にありません.


質問 RANDOM_SEED で初期化した(シードを設定した)後に RANDOM_NUMBER で乱数を生成したのですが,出力結果が明らかにランダムには見えません.RANDOM_SEED の正しい使い方を教えてください.
答え

RANDOM_NUMBER の擬似乱数発生アルゴリズムはコンパイラに依って異なります.
nAG Fortran コンパイラでは Mersenne Twister を採用しています.

Mersenne Twister は大きな状態ベクトル(630 個の 32-bit 整数)と非常に長い周期(約 106000)を持ちます.
このため,低エントロピーにならないようにシード(630 個の整数値)を適切に設定する必要がありますが,実際のところ,ユーザーがこれを直接行うことは困難です(ほとんどの場合,シードが低エントロピーになり,その結果,生成される乱数列にも低エントロピー部分が現れます).

また,シードはランダムなビット列(2 万個以上の 0 と 1 の列)です.
そして,そのビット列の約半分は 0 でないことが望まれます.
従って,たくさんの小さな整数値をシードに設定することは良くありません.

(1) RANDOM_NUMBER を呼び出す毎に異なる乱数列を得たい場合

RANDOM_SEED を使わずに,RANDOM_NUMBER だけをご利用ください.
(適切なシードが裏で自動的に設定されます.)

プログラム例:

program unique_sequences
  implicit none
  print *,'First sequence'
  call show_random(8)
  print *,'Second (different) sequence'
  call show_random(8)
contains
  subroutine show_random(n)
    integer, intent(in) :: n
    real x(n)
    call random_number(x)
    print 1, x
1   format(99f8.5)
  end subroutine
end program

(2) RANDOM_NUMBER を呼び出す毎に同じ乱数列を得たい場合

初回の乱数生成時に RANDOM_SEED の GET 引数でシードを取得して保存してください.
そして,次回以降の乱数生成時に RANDOM_SEED の PUT 引数でそのシードを設定してくだい.

プログラム例:

program sequence_restarting
  implicit none
  integer rsize
  integer, allocatable :: rseed(:)
  call random_seed(size = rsize) ! シードの格納に必要なサイズを取得する.
  allocate (rseed(rsize))        ! シードの格納領域を確保する.
  call random_seed(get = rseed)  ! 次回も同じ乱数を生成できるようにシードを取得する.
  print *,'First sequence'
  call show_random(8)
  call random_seed(put = rseed)  ! 前回と同じシードを設定する.
  print *,'Second (restarted) sequence'
  call show_random(8)
contains
  subroutine show_random(n)
    integer, intent(in) :: n
    real x(n)
    call random_number(x)
    print 1, x
1   format(99f8.5)
  end subroutine
end program

もし,ご自分でシードに値を設定したい場合は,シード配列の初めの要素に値を設定してください.
そして,残りの要素にはゼロを設定してください.

プログラム例:

program repeatable_sequences
  implicit none
  integer rsize
  integer, allocatable :: rseed(:)
  call random_seed(size = rsize) ! シードの格納に必要なサイズを取得する.
  allocate (rseed(rsize))        ! シードの格納領域を確保する.
  rseed(1) = int(z'1f2d3b5a')    ! シード配列の最初の要素に自身の値を設定する.
  rseed(2:) = 0                  ! シード配列の残りの要素にゼロを設定する.
  call random_seed(put = rseed)  ! シードを設定する.
  print *,'First sequence (always the same)'
  call show_random(8)
  call random_seed(put = rseed)  ! 前回と同じシードを設定する.
  print *,'Second sequence (also always the same)'
  call show_random(8)
contains
  subroutine show_random(n)
    integer, intent(in) :: n
    real x(n)
    call random_number(x)
    Print 1, x
1   Format(99f8.5)
  end subroutine
end program


「Undefined symbols for architecture x86_64: "_main", referenced from: ...」というリンクエラーが出てプログラムがビルドできません.

以下のリンクエラーは,リンクの対象に主プログラムがないことが原因です.

リンクエラー(64-bit モードの場合):

Undefined symbols for architecture x86_64:
  "_main", referenced from:
     implicit entry/start for main executable
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)

リンクエラー(32-bit モードの場合):

Undefined symbols for architecture i386:
  "_main", referenced from:
     implicit entry/start for main executable
ld: symbol(s) not found for architecture i386
clang: error: linker command failed with exit code 1 (use -v to see invocation)

例えば,以下のプログラムは問題なくビルドできます.

subroutine hello
  print *, "Hello World"
end subroutine

program main
  implicit none
  call hello
end program

しかし,主プログラム(program main ~ end program)を削除して,サブルーチンだけにすると,コンパイルには通りますが,リンクの段階で主プログラムがないため,上記のリンクエラーが出力されます.


「実行時エラー: *** 算術例外: 浮動小数ゼロ除算 - 終了します」というエラーが出て実行が途中で止まります.

多くのコンパイラ環境では,算術例外(ゼロ除算など)を無視して実行を継続する仕様がデフォルトになっていますが,Fortran Builder(nAG Fortran コンパイラ)では,算術例外(ゼロ除算など)が発生した場合,そこで実行をストップしてエラーを出力する仕様がデフォルトとなっています.

算術例外(ゼロ除算など)を無視して実行を継続したい場合は,Fortran Builder メニューバーから「プロジェクト > プロジェクトの設定」を開き,

Fortran コンパイラ > 基本設定 > IEEE モード (-ieee=) > 全ての IEEE 算術機能 (=full)

を指定してください.

プログラム例:

program division_by_zero
  implicit none
  real x
  x = 1.0
  print *, x / (-2)  
  print *, x / 0
  print *, x / 2
end program
デフォルトでは,ゼロ除算でエラーとなり実行が止まります.
  -0.5000000
Abort trap: 6
コンパイラオプション -ieee=full を指定した場合は,最後まで実行を行います.
  -0.5000000
 Infinity
   0.5000000

質問 Fortran Builder をデフォルト(出荷時の状態)に戻すことはできますか?
答え

はい,可能です.

Fortran Builder メニュー「ツール > 設定 > Fortran Builder の初期化」をご利用ください.

※ この操作によって,ユーザー作成のファイル(ソースファイルなど)が消えることはありません.


質問 デバッグ実行を行うと「ユーザ名」と「パスワード」を求められます.どうすれば良いですか?
答え

ログイン後の初回のデバッグ実行時には次の様なメッセージが表示され「パスワード」を求められます.

「Developer Tools Access が別のプロセスを制御しようとしています。これを許可するには、パスワードを入力してください。」

お手数ですが,ログインしているユーザの「パスワード」を打ち込んでください.

特に Developer Tools グループに属していないユーザ(多くの場合,通常ユーザ)の場合,次の様なメッセージが表示されログインしているユーザの「ユーザ名」と「パスワード」を打ち込んでも制御を取得できません.

「Developer Tools Access が別のプロセスを制御しようとしています。これを許可するには、"Developer Tools" グループに属するユーザの名前とパスワードを入力してください。」

この場合,以下の (a) もしくは (b) のどちらかで回避することができます.

(a) Developer Tools グループに属するユーザ(多くの場合,管理者ユーザ)の「ユーザ名」と「パスワード」を入力する.
(b) 自身のユーザを Developer Tools グループに属させる.

ターミナルを開いて以下のコマンドを打ち込んでください.

dscl -u [管理者のユーザ名] . append /Groups/_developer GroupMembership [自身のユーザ名]

パスワードを求められますので,管理者のパスワードを打ち込んでください.

これ以降は,自身の「ユーザ名」と「パスワード」で制御を取得できるようになります.
(ログイン後の初回のデバッグ実行時に「パスワード」を求められることには変わりありません.)


質問 アンインストールの方法を教えてください。
答え

以下の3つのアイテムを削除してください.

① Fortran Builder for Mac(本体)

アプリケーションフォルダから "FortranBuilder" をゴミ箱に入れてください.

nAG Fortran Compiler(コンパイラ)

コンパイラのアンインストールスクリプト UNINSTALL_nAGFOR をターミナルから実行してください.

コマンド例:
sudo /usr/local/lib/nAG_Fortran/UNINSTALL_nAGFOR

③ iChm(ヘルプファイルビューワー)

アプリケーションフォルダから "iChm" をゴミ箱に入れてください.

© 日本ニューメリカルアルゴリズムズグループ株式会社 2025
Privacy Policy  /  Trademarks