3

Eclipseで完全にホストされ、C ++で起動し、Adaを呼び出すプログラムを作成しようとしています。GNATBenchをロードしましたが、Adaプログラムを問題なく実行できます。私ができないことは、C++プロジェクトにAdaプロジェクトを呼び出させることです。

探し回った後、makeファイルを使用して以下のコードを見つけて実行しました。

http://www.pegasoft.ca/resources/boblap/book.html

また、自分の目標が達成されたことを示す投稿を見つけました。

http://blogs.windriver.com/parkinson/2009/10/yesterday-adacore-announced-the-release-of-gnatbench-231-its-ada-integrated-development-environment-eclipse-plugin-which.html

EclipseのC++でEclipseのAdaを呼び出すには、他に何を含める必要がありますか?


MAKE FILEの使用:

$ c++ -c test.cc
$ gnatgcc -c test_subr
$ gnatbind -n test_subr
$ gnatgcc -c b~test_subr
$ gnatlink -o main test.o test_subr.ali --link=c++
$ ./main

  CPPコード:

//main.cc

#include extern "C" void adainit(void);    
#include extern "C" void adafinal(void);
#include extern "C" void ada_subroutine(void);

int main(int argc, char **argv)
{
   puts("C++ main");
   adainit();

   ada_subroutine();

   adafinal();
   puts("C++ done");

   return 0;
}

エイダコード:

package Test_Subr is
    procedure Ada_Subroutine;
    pragma export(CPP, Ada_Subroutine);
end Test_Subr;

with Ada.Text_IO;
use Ada.Text_IO;

package body Test_Subr is

    procedure Ada_Subroutine is
    begin
        put("IN ADA");
    end Ada_Subroutine;

end Test_Subr;
4

3 に答える 3

3

ExportプラグマのExternal_Nameパラメーターを使用してみましたか?(IIRC、C ++リンケージはかなり混乱する可能性があります。)

pragma Export
( Convention    => CPP,
  Entity        => Ada_Subroutine,
  External_Name => "Ada_Subroutine "
);
于 2012-04-16T20:54:03.980 に答える
2

私はEclipseを知りません。しかし、EclipseでC ++プロジェクトを取得して、別のC++プロジェクトを呼び出すにはどうすればよいでしょうか。またはCで書かれたもの?

EclipseにAdaをライブラリとしてビルドさせ、C ++から呼び出すことができるかもしれませんか?

于 2012-04-20T09:33:19.137 に答える
1

一般的なケースでは、両方のリンケージ(パラメーター受け渡しスキーム)を同じにするためextern Cに、C++側とAda側で使用する必要があります。pragma exprort (C, ..ただし、AdaとC ++の両方にgccを使用している場合は、pragma export (CPP代わりに使用できます。

あなたが注意しなければならないもう一つの問題があります。「メイン」(プログラムのエントリポイント)がAdaで記述されていないadainit()場合は、何かを呼び出す前に、Adaのエラボレーションプロセスを(ルーチンを介して)手動で1回呼び出す必要があります。同様に、ほとんどの場合adafinal()、プログラムを終了する前に電話をかける必要があります。

于 2012-04-18T13:21:01.203 に答える