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?


使用制作文件:

$ 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 pragma 的 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++ 端和pragma exprort (C, ..Ada 端使用以使两个链接(参数传递方案)相同。但是,如果您对 Ada 和 C++ 都使用 gcc,那么您可以pragma export (CPP改用。

还有一个你必须注意的细节。如果你的“main”(程序的入口点)不是用 Ada 编写的,那么你需要adainit()在调用任何东西之前手动调用 Ada 的精化过程(通过routine)一次。同样,在大多数情况下,您应该在adafinal()退出程序之前调用。

于 2012-04-18T13:21:01.203 回答