我正在尝试创建一个完全托管在Eclipse中的程序,以C ++启动,并调用Ada。我加载了GNATBench,可以毫无问题地运行Ada程序。我不能做的是让一个C ++项目调用一个Ada项目。
在打猎之后,我使用make文件找到并执行了下面显示的代码。
http://www.pegasoft.ca/resources/boblap/book.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;
答案 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()
。