如何使用GPRbuild排除某些功能?

时间:2019-02-19 16:22:59

标签: ada vxworks gprbuild

我在Ada中有一个使用gprbuild编译的可执行文件。该可执行文件使用一些简单的功能(如sin e cos)。该可执行文件在绑定到使用vxwork设计的POS(分区操作系统)的App中运行。重新编译整个过程后,在POS_API.o和ada可执行文件(hello.o)之间会出现许多函数声明错误。这些函数(sin,cos,...)都在同一个库中。不幸的是,不允许在POS中取消引用所有此功能的最简单解决方案(设计范围)。有关如何编译或继续进行操作的任何建议? 为了避免多重引用错误,在没有特定库或某些函数的情况下进行编译是否有可能?

1 个答案:

答案 0 :(得分:0)

恐怕这并不是一个真正的答案:很大程度上是因为我与VxWorks和Ada合作已有十多年了,事情变得有些朦胧。另外,对您的问题发表评论的时间有点长

在我使用它的过程中,VxWorks附带了一套完整的软件,您可以将其配置为仅将所需的组件保存到内核中:在这种情况下,可能包括maths软件包,诸如sin(),以及taskSpawn()之类的操作系统功能。

我们使用的Ada / VxWorks构建过程生成了部分链接的目标文件,其中引用了sin()taskSpawn()的解析(我不记得是如何实现的;如果使用GNU { {1}},也许是ld-r开关?)。当VxWorks通过配置的内核加载此目标文件时,未解析的引用将得到解析,然后我们就走了。

现在,我不知道您的POS_API会做什么。它是否位于已配置的VxWorks内核之上?它会加载您的Ada程序本身吗?如果它本身是VxWorks程序,它将如何导出--relocatable

我怀疑问题与您链接可执行文件的方式有关。也许您可以向我们展示您的GPR文件?否则,我只是在黑暗中呼啸。