首页 > 解决方案 > 如何用 GPRbuild 排除一些功能?

问题描述

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

标签: adavxworksgprbuild

解决方案


恐怕这不是一个真正的答案:主要是因为我与 VxWorks 和 Ada 合作已经十多年了,事情变得有些模糊。另外,对您的问题发表评论有点长

当我使用它时,VxWorks 带有一整套软件,您可以将其配置为仅将您需要的组件保存到内核中:在这种情况下,它可能包括数学包、类似sin()的函数以及类似taskSpawn().

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

现在,我不知道您的 POS_API 做了什么。它是配置的 VxWorks 内核的皮肤吗?它会加载您的 Ada 程序本身吗?如果它本身是一个 VxWorks 程序,它是如何导出的sin()

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


推荐阅读