これは後でいくつかのクールなことをする前にテストするためにまとめた簡単なプロジェクトです。最終的な目標は、プログラムが素晴らしいdll kung fuを使用してモジュール性を処理できるようにすることです。AdaでカスタムDLLをリンクするにはどうすればよいですか?
しかし、赤ん坊のステップ。今はただのものにしたいだけです。
ここで私はAdder.adsを持っている:
package Adder is
function Add(A : Integer; B : Integer) return Integer;
end Adder;
とそれぞれAdder.adb:
package body Adder is
function Add(A : Integer; B : Integer) return Integer is
begin
return A + B;
end Add;
end Adder;
エキサイティングな、私は知っています。
私はこれを行う方法のいくつかの異なったチュートリアルを見てきたし、それらのどれもが同意していないが、this oneからヒントを取って、私はこれらのコマンドを思い付いた:
gnatmake -c Adder.adb
gcc -shared -shared-libgcc -o Adder.dll Adder.o
これは、少なくともAを生成し、 dll。私はそれが実際に動作するか、問題が主なexeである場合、それを生成するかどうか分からない。
私はgnatが.aliと.oファイルを不正行為して使用しようとしないように、メインのexeファイルをすべて別のディレクトリに保存しました。ビルドする前にdllをディレクトリにコピーします。私はさまざまな方法でこの微調整を試みましたが、いくつかの異なるエラーが出ましたが、今私が今持っているのはこれです。
Main.adb:これまで
with Adder_Spec; use Adder_Spec;
with Ada.Text_IO; use Ada.Text_IO;
procedure Main is
begin
Put_Line(Integer'Image(Add(3,4)));
end Main;
イェーイほとんど役に立たないプログラム。今、私は、DLLのスペックを持つようになってる知って、私はaforewith'd Adder_Spec.adsを思い付いた:
package Adder_Spec is
function Add(A : Integer; B : Integer) return Integer;
private
pragma Import(Ada, Add, "Add");
end Adder_Spec;
を今、私はこの種類の方法の束試した言ったように、 3つ目のインポートパラメータを省略したり、インポートを省略したり、インポートを維持したり、プライベートな部分に分離したりしない場合もあります。私はまた、コンパイルコマンドで、いくつかの方法をプレイしようとしましたが、ここでは最新のものです:
gnatmake Main.adb -bargs -shared -largs -lAdder
それは誤り「『追加』を未定義の参照」を出してくれる、この特定のコマンドで。 -vフラグを追加すると、それほど有用な情報は得られません。
gnatmake --helpをチェックすると、デフォルトモードがgnat 2012であることがわかります。おそらく、私は2005年と95年のフラグをコンパイルしようとしていたので、それはあまりないはずです。
だから誰にも分かりやすいですか?前もって感謝します。
これはGNATの質問であり、Adaの質問ではありません(しかし、私は "ada"というタグをとっても合理的だと思います)。 –
'gcc -shared -shared-libgcc -o Adder.dll -Adder.o'と言うと、あなたは単に' Adder.o'を意味すると思いますか? –
@SimonWrightうん、良いキャッチ。 – Devsman