我在Ada中使用gprbuild编译了一个可执行文件。可执行文件使用了一些简单的函数(比如sin e cos)。这个可执行文件在一个绑定到用vxwork设计的POS(分区操作系统)的App中运行。重新编译整个过程后,POS_API.o和ada可执行文件(hello.o)之间会出现一堆多个函数声明错误。这些函数(sin,cos,...)都在同一个库中。不幸的是,不允许在POS中取消引用所有这些功能的最简单的解决方案(设计的约束)。关于如何编译或继续的任何建议?这是否有可能在没有特定库或某些函数的情况下编译以避免多重引用错误?
我担心这不是一个真正的答案:主要是因为我与VxWorks和Ada合作已经十多年了,事情有点模糊。此外,对您的问题发表评论还有点长
正如我所使用的那样,VxWorks附带了一整套软件,您可以将其配置为仅包含内核所需的组件:在这种情况下,可能包括数学包,sin()
等函数以及OS等函数taskSpawn()
。
我们使用的Ada / VxWorks构建过程生成一个部分链接的目标文件,引用sin()
,taskSpawn()
未解析(我不记得如何实现;如果使用GNU ld
,可能是-r
或--relocatable
开关?)。当VxWorks在配置的内核上加载此目标文件时,未解析的引用将得到解决,然后我们离开。
现在,我不知道你的POS_API做了什么。它是配置的VxWorks内核之上的皮肤吗?它会加载你的Ada程序本身吗?如果它本身就是一个VxWorks程序,它怎么会出口sin()
?
我怀疑问题与您链接可执行文件的方式有关。也许您可以向我们展示您的GPR文件?否则,我只是在黑暗中吹口哨。