2

私はこのサイトを初めて使用しますが、ここはヒントやヘルプがあれば入手できる場所のようです。

「C 呼び出し Fortran サブルーチン」について学んでいます。C の知識はありますが、Fortran についてはあまり詳しくありません。

プラス面:いくつかの例を見て、いくつかをコンパイルできました。

マイナス面:私はやや迷っています。C または Fortran 90、および print_matrix.f と print_matrix.c を使用して設計できるメイン プログラムがあります。

main.c プログラム内で、
- 行列サイズ 3 x 3 の 1 ~ 9 の配列を生成します -
c 関数
を呼び出します - fortran サブルーチンを呼び出します

私はすでに人口の多い側を持っています(正確ではないかもしれません)が、サブルーチンで立ち往生しています。fortran と C の出力は、makefile を使用して print_matrix.f90 と print_matrix.c を介して出力されるものと同じでなければなりません。サブルーチンの呼び出し部分について助けが必要です。どこから始めればいいのかわかりません:(

私はただ助けが必要です。

4

1 に答える 1

4

正直なところ、あなたの問題が何であるかを正確に伝えるのは少し難しいです。しかし、これが私のLinuxマシンで動作する例です。

callf.c:

  #include<stdio.h>
  int main(int argc, char **argv) {
  int i=0;
  increment_(&i);
  printf("%d\n",i);
  return;
  }

増分.f90:

subroutine increment(n)
integer n
n=n+1
return
end subroutine

コンパイル済み:

gcc -c callf.c
gfortran -c increment.f90
gcc callf.o increment.o -lgfortran

結果:

> ./a.out
1

2つの難しい部分は、1)関数呼び出しの正確な名前を取得することと、2)2つのコードをリンクするために必要なフラグを知ることです。Re:1)FORTRANコードをコンパイルした後、increment.oで「nm」ユーティリティを実行し、オブジェクトの名前が「increment_」であることがわかったため、「increment_」を使用することを知っていました。一部のシステムでは、「INCREMENT」、「_ increment」、またはその他のあらゆる種類のものが表示される場合があります。Re:2)使用しているコンパイラーの情報が利用可能である必要があります。それは大きく異なります。

于 2012-09-19T19:49:54.063 に答える