我在Ada中有一个使用gprbuild编译的可执行文件。该可执行文件使用一些简单的功能(如sin e cos)。该可执行文件在绑定到使用vxwork设计的POS(分区操作系统)的App中运行。重新编译整个过程后,在POS_API.o和ada可执行文件(hello.o)之间会出现许多函数声明错误。这些函数(sin,cos,...)都在同一个库中。不幸的是,不允许在POS中取消引用所有此功能的最简单解决方案(设计范围)。有关如何编译或继续进行操作的任何建议? 为了避免多重引用错误,在没有特定库或某些函数的情况下进行编译是否有可能?
答案 0 :(得分:0)
恐怕这并不是一个真正的答案:很大程度上是因为我与VxWorks和Ada合作已有十多年了,事情变得有些朦胧。另外,对您的问题发表评论的时间有点长
在我使用它的过程中,VxWorks附带了一套完整的软件,您可以将其配置为仅将所需的组件保存到内核中:在这种情况下,可能包括maths软件包,诸如sin()
,以及taskSpawn()
之类的操作系统功能。
我们使用的Ada / VxWorks构建过程生成了部分链接的目标文件,其中引用了sin()
,taskSpawn()
的解析(我不记得是如何实现的;如果使用GNU { {1}},也许是ld
或-r
开关?)。当VxWorks通过配置的内核加载此目标文件时,未解析的引用将得到解析,然后我们就走了。
现在,我不知道您的POS_API会做什么。它是否位于已配置的VxWorks内核之上?它会加载您的Ada程序本身吗?如果它本身是VxWorks程序,它将如何导出--relocatable
?
我怀疑问题与您链接可执行文件的方式有关。也许您可以向我们展示您的GPR文件?否则,我只是在黑暗中呼啸。