在Eclipse中从C++打电话给Ada
Calling Ada from C++ in Eclipse
我正在尝试创建一个完全托管在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()
。
- 预计在GMock打电话,工厂返回unique_ptr
- 从处理程序捕获时如何获取 Ada 异常消息C++?
- 模板操作员<未打电话
- c 击曲线在代表前打电话给COUT
- 我需要在SDL_DestroyWindow前打电话给SDL_GL_DeleteContext吗?
- 将ADA API暴露于C/C (可扩展方式)
- 打电话给功能后,为什么我会陷入无限循环中
- DLL文件中函数的预期行为在C中编写并从CPP文件打电话
- 打电话时返回未知错误
- 为什么在任务后打电话给攻击函数
- ADA亚型等效于C
- 打电话给Freelibrary时可能的僵局
- 我可以打电话给<algorithm>空旷的设施吗?
- 为什么逗号运算符在运算符[]中打电话给操作员[],而不是在Operator()内部调用
- 画一张卡,并打电话给它
- 打电话给谁是无效的关闭手(句柄)是安全的吗?
- 多个vtable,在打电话时出现错误
- COUT如何打电话给班级的私人成员
- cout后打电话给scanf
- 在Eclipse中从C++打电话给Ada