在Eclipse中从C ++调用Ada

时间:2012-04-16 19:03:09

标签: c++ eclipse eclipse-plugin eclipse-cdt ada

我正在尝试创建一个完全托管在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;
}

Ada代码:

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;

3 个答案:

答案 0 :(得分:3)

您是否尝试过使用Export pragma的External_Name参数? (IIRC,C ++链接可能会受到严重破坏。)

pragma Export
( Convention    => CPP,
  Entity        => Ada_Subroutine,
  External_Name => "Ada_Subroutine "
);

答案 1 :(得分:2)

我不懂Eclipse;但是,你如何在Eclipse中获得一个C ++项目来调用另一个C ++项目?或用C写的一个?

您可以将Eclipse转到build the Ada as a library并从C ++调用它吗?

答案 2 :(得分:1)

在一般情况下,您需要在C ++端使用extern C,在Ada端使用pragma exprort (C, ..以使两个链接(参数传递方案)相同。但是,如果您对Ada和C ++都使用gcc,那么您可以使用pragma export (CPP代替。

还有一点需要注意。如果您的“主要”(程序的入口点)is not written in Ada,则需要在调用任何内容之前手动调用Ada的详细过程(通过例程adainit())。同样,在大多数情况下,您应该在退出程序之前调用adafinal()