在Eclipse中从C++打电话给Ada

Calling Ada from C++ in Eclipse

本文关键字:Ada 打电话 C++ Eclipse 中从      更新时间:2023-10-16

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

您是否尝试过使用导出杂注的External_Name参数?(IIRC,C++联系可能会变得非常混乱。

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

我不了解 Eclipse; 但是,如何在 Eclipse 中获取一个C++项目来调用另一个C++项目?还是用 C 编写的项目?

你也许可以让 Eclipse 将 Ada 构建为一个库,并从C++调用它?

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

您还必须注意一个尼特。如果你的"main"(程序的入口点)不是用 Ada 编写的,那么你需要在调用任何内容之前手动调用 Ada 的阐述过程(通过例程adainit())。同样,在大多数情况下,您应该在退出程序之前调用adafinal()