問題タブ [gnat]
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.
ada - コンソールなしで Gnat 作成プロセス
バックグラウンドで静かに実行され、現在のユーザーのデスクトップと対話し、サービスではないアプリケーションが必要です。
stdout コンソールを生成せずにアプリケーションを起動したい。
C では Kernel32.dll の FreeConsole を使用して行われているようです。そのため、関数をインポートしました。
これはコンソールからプロセスを切り離すだけで、コンソールは削除しません。この動作の詳細はこちら
そこで、ウィンドウへのハンドルを追跡してから、それを CloseHandle() しようとしました。
これもどうにもなりません。Get_Console_Handle が間違ったハンドルを返すに違いありません。
私の質問は、コンソール ウィンドウを作成しない Gnat コマンド ライン オプション、またはコンソール ウィンドウを閉じる方法はありますか?
linux - Ada コンパイラが「このシステムには Ada コンパイラがインストールされていません」というメッセージが表示されてクラッシュします。gccのバージョンダウン後
gcc バージョン 4.6.3 を 4.3.4 にダウングレードしましたが、ADA バージョンが gnat-4.6.3 に変更されていないため、エラーが発生しました
このシステムには Ada コンパイラがインストールされていません。
ADA をブヨ 4.3.4 に設定するにはどうすればよいですか?
makefile - gfortran がインストールされていますが、-lgfortran が見つかりません
重複の可能性:
lgfortran が見つかりません
私の質問はlgfortran not foundと非常によく似ていると考えられることを認めなければなりませんが、私は Linux の初心者なので、もっと助けが必要で、上記の投稿で探しているものが見つかりませんでした。
新しい Linux mint Debian エディションがインストールされており、Ada が機能するように lapack バインディングを作成しようとしています。
gfortran をチェックすると、次のようになります。
そして、私ならlocate libgfortran
、私は得る:
を実行するmakefile
と、次のようになります。
私が使用しているメイクファイルは次のとおりです。
http://12000.org/my_notes/ada/lapack_and_blas/lapack_interf_makefile.txt
私は Linux に非常に慣れていないので、これを修正する方法について詳細な指示を得ることができれば、非常に感謝しています。
ありがとうございました
ada - オペレーションは 1 つのタイプでのみディスパッチできます
私はレコードを持っていて、それに対するいくつかのアクセサ関数が必要でした。
そして、ここにGNATが私に与えるものがあります:
このエラーは、Ada の初心者にとってはやや不可解であり、何が間違っていたのか、どのように正しく行うのかについての説明をいただければ幸いです。
eclipse - Remote System Explorer を使用した Eclipse での GNATbench Ada
WindowsでEclipse Adaを認識させるために、Eclipse用のGNATbench Adaプラグインを使用します。これはローカル ファイルではうまく機能しますが、私の主な開発はリモートの Unix ボックスで行われています。Eclipse 用の Remote System Explorer プラグインを使用して、Windows から Unix ボックス上の C ファイルをリモートで編集することに成功しましたが、Ada では同じように動作させることができません。
GNATbench プラグインが Remote System Explorer (RSE) プラグインで正しく動作しないようです。おそらく GNATbench のバグで、Eclipse プロジェクトの観点からファイルに対処するのではなく、フル パスでファイルを直接対処しています。
誰もこれを試しましたか?
generics - Ada ジェネリックとアセンブリ コードの生成
Adaジェネリックからより小さく/より効率的なアセンブラコードを取得する方法があるかどうか疑問に思っています.
たとえば、一般的な手順を示すために少しダミーの Ada プログラム (main.adb) を作成し、それを 6 回インスタンス化しました。
コンパイルするためにgnatmake main.adb
、結果objdump -d -S main > main.dump
を見ると、一般的なインスタンス化ごとに 6 つのセクションがあることがわかります。
... <中略>
... <中略> など...
それぞれ非常によく似たコードを持っているので、gnatmake がThing_Gen
いくつかのパラメーターでコードを再利用するのではなく、テンプレートとして使用し、インスタンス化ごとにコードを展開していると思われます。
問題は、インスタンス化ごとにコピー/貼り付けするのではなく、ジェネリックのコードを gnatmake に再利用させる方法です。
インスタンス化が次の形式をとると予想していました。
- Baa の設定 / 一般的な
X
パラメータThis_Value
のBob
適用This_Address
- 呼び出し
Thing_Gen
(次に、セットアップされたものを使用して期待される結果を生成します)
コードの再利用につながりThing_Gen
ます。しかし、そうではないようです。私がアセンブラーとコンパイラーの問題の初心者である理由の説明も歓迎します!
注: Sparc と Intel でも同じ結果になります。(Intel gnatmake バージョン 4.4.3)
ada - LinuxでGNATGPSを実行するための実行可能ファイルの名前は何ですか?
ITはこれを私のマシンにインストールしました。GNATGPSを実行するための実行可能ファイルの名前を見つけようとしています。
ありがとう。
c++ - Ada95の共有ライブラリ/オブジェクト間でデータを共有する
さて、これは長いものになります、事前にお詫び申し上げます。=)
ここで使用されているコードは、機密保持の理由から、残念ながら実際の製品コードと正確には一致していませんが、問題、いくつかのテスト済みの解決策を説明し、議論を容易にするために構築されていることを指摘する必要があります。概念レベルでは、すべてが削除されて簡略化されていますが、十分に似ています。データ保護は、実際には必要ですが、ここでは無視されています。
問題
Adaコードから生成された共有オブジェクト「data_provider」があります。Data_providerには内部データレコードがあり、これも(異なる)Adaコードから生成された多数の共有オブジェクト'data_user'1からnからアクセスする必要があります。これらは型defを含むAda仕様を共有しますが、パフォーマンス上の理由から、基本的にデータは共有オブジェクトの境界を越えて共有する必要があります。
これらの共有オブジェクトは、コンパイル時または実行時にlibdl(これはまだ石で書かれていません)を介してc ++メインプログラム(ここでは「ラッパー」と呼ばれます)にリンクされているため、ソリューションはどちらの方法でも機能する必要があります。完全な型defが利用できない場合でも、c++側からもデータを検査できると有益であると付け加えておきます。
-05はピンチで機能する可能性がありますが、コードはAda95コンパイルに合格する必要がある可能性があります。-12はテーブルから外れています。プラットフォームはRHEL5のGNATです。
私が試したもの
現在、「機能する」ソリューションは、データレコードのアドレスを取得し、それをラッパーに渡し、data_userオブジェクトに渡し、アドレス->アクセスを変換し、ポインティデータを内部オブジェクトにコピーすることです。これは、以下のサンプルコードで実装されているメソッドです。ただし、余分なコピーはパフォーマンスの面で問題になる可能性があります。
'動作する'別のテスト済みの方法は、data_providerに変数をエクスポートさせ、data_usersに同じものをインポートさせることですが、これには、コンパイル時にすべてをリンクする必要があり、データをグローバルに公開するため、もろいのは言うまでもなく、かなり汚い感じがします。
条項for data'address use addr
は、精緻化時に住所を知る必要があるため、機能しないと思います。
他のいくつかのことは試されて破棄されましたが、私は今のところそれらをテーブルから外しておきます。
以下のコードと組み合わせると、いくつかの提案を得るのに十分であることを願っています。ぜひ聞きたいです。何か説明が必要な場合は、それを求めてください。=)
私は実際、私がただ気が狂っていて、ここで明白な何かを見逃していることを望んでいます。そして、私は、この混乱全体が、Adaやその他の方法で、優れたコーディング慣行に完全に準拠していないことを認識していますが、それでも私はそれに固執しています。
wrapper.cpp
data_types.ads
data_provider.ads
data_provider.adb
data_user.ads
data_user.adb
TLDR
Adaで記述され、C ++から外部から呼び出される複数の共有ライブラリは、できればコピーせずに、Adaレコードに格納されている同じデータにアクセスする必要があります。それ、どうやったら出来るの?