gfortranを使用してソースからビルドすることにより、レガシーFORTRANコードを機能させようとしています。ようやく正常にビルドできましたが、実行時に範囲外エラーが発生します。私は gdb を使用し、エラーを loc() 組み込み関数を使用する関数まで追跡しました。渡された整数値 ae を使用して の値を出力しようとすると、loc(ae)
「現在のコンテキストにはシンボル "loc" がありません」というエラーが表示されます。ifort 11.x でコンパイルを試み、DDT でデバッグしたところ、同じエラーが発生しました。私にとって、これはコンパイラが組み込みについて何も知らないことを意味します。
少し読んだだけで、loc 組み込み関数が F77 標準の一部ではないことが明らかになったので、それが問題の一部である可能性があります。以下に組み込みの定義を投稿しましたが、それをコードに実装する方法がわからないため、loc() を使用できます。
アドバイスはありますか、それとも私の問題を誤解していますか? gfortran と ifort の両方が範囲外エラーのために同じ場所でクラッシュしますが、loc() を使用する関数は両方のコンパイラ間で同じ大きな数を返すためです。両方のコンパイラが loc に対して同じ値を返すと、 loc() が機能しないというのは少し奇妙に思えます。
使用法:
iaddr = loc(obj)
どこ:
obj は、アドレスが必要な変数、配列、関数、またはサブルーチンです。iaddr は、「obj」のアドレスを持つ整数です。アドレスは、LARn 命令によって格納されるものと同じ形式です。
説明:
LOC は、何かのアドレスを取得するために使用されます。返される値は Fortran 内ではあまり役に立ちませんが、GMAP サブルーチンや非常に特殊なデバッグに必要になる場合があります。