创建C/C++;现有ADA库的语言绑定 我在艾达()中有一个现有的库,我有兴趣从C++上下文中使用。

创建C/C++;现有ADA库的语言绑定 我在艾达()中有一个现有的库,我有兴趣从C++上下文中使用。,c++,shared-libraries,ada,gnat,C++,Shared Libraries,Ada,Gnat,在GNAT的早期版本中,似乎有一个,可以为现有的Ada代码创建c头 对于GNAT的当前版本,我只能找到关于编程的部分。这给了我一个想法,如何通过使用pragmas使Ada代码符合C-abi来创建一个可以接口的库,但是我找不到如何为现有库实现这一点的提示,我不想修改它 我不确定我是否理解这个问题,但是你不能用C风格的API在Ada中编写一个包装器库吗?我想Keith已经有了。通常,您会使用Convention=>C来“导出”Ada代码,但这需要修改库,或者正如Keith所说,在库上编写一个(简单的

在GNAT的早期版本中,似乎有一个,可以为现有的Ada代码创建c头


对于GNAT的当前版本,我只能找到关于编程的部分。这给了我一个想法,如何通过使用pragmas使Ada代码符合C-abi来创建一个可以接口的库,但是我找不到如何为现有库实现这一点的提示,我不想修改它

我不确定我是否理解这个问题,但是你不能用C风格的API在Ada中编写一个包装器库吗?我想Keith已经有了。通常,您会使用
Convention=>C
来“导出”Ada代码,但这需要修改库,或者正如Keith所说,在库上编写一个(简单的)包装器。(如果库是源代码形式,则导出的代码可能只是“重命名”库代码,而不是调用它。但是,如果它是预编译的,包装器可能需要调用它,以提供“约定C”ABI.我本来希望避免在api上手动编写一个相当大的包装器。但是如果是这样的话……对于“相当大”的合适值,你可能会发现一个简单的Python脚本(或Ada程序)将完成90%的工作,并偿还编写它所花费的时间。不幸的是,我不知道你将如何指定“convention Ada”如果您想直接从C调用库,请访问C代码,如果您想找到一种(可能是特定于编译器的)方法,可以搜索“\u stdcall”及其朋友。您提到的生成器在GNAT GPL 2016和FSF GCC 6.1中都有。