問題タブ [g77]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c - 混合プログラミング: C から FORTRAN を呼び出す
C/C++ からの FORTRAN サブルーチンの呼び出しに関する概念実証を行う必要があります。私は正しい方向にいるのかわかりません、私を導いてください....
私がしたことは...
次のFORTRANコードを書きました
g77を使用してコンパイルしましたg77.exe -c FORTRANfun.for
次のcコードを書きました...
Visual Studio Cコンパイラを使用してコンパイルしましたcl /c new.c
リンクしようとするとLINK new.obj FORTRANfun.o
、次のエラーが表示されます...
segmentation-fault - G77 でコンパイルされたプログラムでのスタック動作の混乱
C++ と Fortran 77 が混在しており、すべて G77 でコンパイルされています。大部分は C++ ですが、ODE ソルバー DVERK を呼び出し、グローバル C 関数を呼び出して導関数 ( で宣言__stdcall
) を取得します。奇妙なSIGSEGVが発生するまで、すべて正常に機能しています。
私はそれを追跡しました、そしてそれは がesp
そのセグメント境界より下に減少していたからです. これが行われた理由は、DVERK に**
演算子が含まれているためです。これは、内部的にはスタック上で値によって渡される 2 つの倍精度値を持つ関数呼び出しであり、16 バイトです。関数は答えを返しますが、次の命令が表示されます。
これは、引数をスタックに戻すかのように、スタック ポインターを 16 バイト減らします (?) G77 は関数呼び出しのたびにこれを行うようですが、スタック ポインターは変更されないため、通常は害はありません。ただし、**
スタック ポインターがデクリメントされたままの場合、そのコードが十分な回数実行されると、SIGSEGV を取得するまでデクリメントが加算されます。(十分なスタック スペースがある場合、DVERK からのリターンによってクリーンアップされるため、この問題は発生しません。)
a**b
コードをに置き換えてみましたが、 の後の 8 バイトと のdexp(dlog(a)*b)
後の 8 バイトの 2 つのステップで発生することを除いて、同じことが起こります。dlog
dexp
G77 がランタイム ライブラリに対して使用する呼び出し規約を設定する際に、何か間違っていることがあるはずです。専門知識が高く評価されます。
ubuntu - GNU Fortran 77 コンパイラまたは g77 を Ubuntu 14.04 にインストールする方法
g77 コンパイラを必要とするライブラリがあります。
オンラインでいくつかの方法を見つけました。しかし、それぞれ失敗しました。これが私の2つの努力の要約です:
1)パッケージをダウンロードし、解凍して $ sudo ./install.sh
2) ( http://seanelvidge.com/2012/08/install-g77-on-ubuntu-9-04/#comment-549085 ) で説明されているように sources.list ファイルを変更したところ、「」の後に g77 が見つかりませんでした。 sudo apt-get update」は正常に実行されました。
$ sudo apt-get install g77
いくつかの助けをいただければ幸いです。
linux - g77 コンパイル エラー (crt1.o、crti.o、-lgcc_s が見つかりません)
私は本当に助けが必要です。論文のためにいくつかのプログラムをコンパイルして実行しようとしています。
問題は、私は以前に Fortran を使用したことがないため、やみくもにドキュメントに依存していることです....具体的には、作業を行うためにいくつかのコマンドを使用するように言われました
それで、Ubuntu 14.04をインストールし(Windowsで作業していましたが、これは別の問題です。Linuxも初めてです)、ターミナルでこれらのコマンドを使用しました。
最初は g77 コマンドを認識できずに動作しませんでしたが、チュートリアルに従って g77 をインストールし、「make all」コマンドを再度起動したところ、部分的に動作するようです。私が理解しているように、コンパイラはディレクトリに一連の.oファイルを作成しますが、6つのメインプログラムをコンパイルすると
これらのエラーが表示されます(イタリア語から一部を翻訳しました)
Fortran と Linux の両方に慣れていないので、本当に理解できません....助けてくれてありがとう!
compiler-errors - gfortran によってコンパイルされたファイルに ident ツールが出力されない
ident ツールを使用して、ソース ファイルとコンパイル済みファイルの両方から RCS キーワード文字列を抽出します。
これは確かにソースコードに対して機能し、GCC によってコンパイルされた C の出力や、G77 によってコンパイルされた Fortran の出力に対しても機能します。
問題は、gfortran コンパイラを使用して fortran コードをコンパイルする場合です。ident ツールは、コンパイルされたコードで RCS キーワードを見つけることができず、何も返しません!
では、gfortran の何が問題なのですか? 変数を操作する最適化はありますか、または ident ツールは gfortran のコンパイル済み出力を解析できなくなりましたか?
どうすればこの問題を解決できますか?
編集:
Fortran ソース コード:
fortran - 「無効な宣言またはシンボルへの参照...」エラー
次のコマンドを含むメイクファイルを ubuntu 32 ビット マシンでコンパイルしたいと考えています。
しかし、解決できない問題がいくつかあります。
なぜこの宣言は無効なのですか? そして、問題を解決する方法は?誰か説明してくれませんか?