ada - 如何用 GPRbuild 排除一些功能?
问题描述
我在 Ada 中有一个使用 gprbuild 编译的可执行文件。该可执行文件使用一些简单的功能(如 sin e cos)。该可执行文件在绑定到使用 vxwork 设计的 POS(分区操作系统)的应用程序中运行。重新编译整个过程后,会在 POS_API.o 和 ada 可执行文件 (hello.o) 之间出现一堆多函数声明错误。这些函数(sin、cos、...)都在同一个库中。不幸的是,不允许在 POS 中取消引用所有这些功能的最简单的解决方案(设计界限)。关于如何编译或继续的任何建议?为了避免多重引用错误,这是否有可能在没有特定库或某些函数的情况下进行编译?
解决方案
恐怕这不是一个真正的答案:主要是因为我与 VxWorks 和 Ada 合作已经十多年了,事情变得有些模糊。另外,对您的问题发表评论有点长
当我使用它时,VxWorks 带有一整套软件,您可以将其配置为仅将您需要的组件保存到内核中:在这种情况下,它可能包括数学包、类似sin()
的函数以及类似taskSpawn()
.
我们使用的 Ada/VxWorks 构建过程会生成一个部分链接的目标文件,其中引用sin()
,taskSpawn()
未解析(我不记得这是如何实现的;如果使用 GNU ld
,可能是-r
or--relocatable
开关?)。当 VxWorks 通过配置的内核加载这个目标文件时,未解析的引用得到解析,然后我们就走了。
现在,我不知道您的 POS_API 做了什么。它是配置的 VxWorks 内核的皮肤吗?它会加载您的 Ada 程序本身吗?如果它本身是一个 VxWorks 程序,它是如何导出的sin()
?
我怀疑问题与您链接可执行文件的方式有关。也许您可以向我们展示您的 GPR 文件?否则,我只是在黑暗中吹口哨。
推荐阅读
- java - 新手在 Java 中使用缓存 API 的最佳方式
- php - 在弹性搜索中按 ID 自定义排序顺序作为数组
- c++ - 使用 boost 从 json 读取缓冲区
- solver - MiniZinc int 超出范围
- javascript - 无效的 useSelector 挂钩调用
- fantom - 为什么从我的合同中撤销 FTM 失败?
- python - 如何单击python-selenium中具有相同名称的按钮
- c++ - 比许多嵌套的“for”循环更好的东西?
- sql-server - “此 SQL Server 中没有可用的 SSISDB” - SSIS 部署任务
- pagespeed-insights - 为什么 Google Console 显示 LCP 问题:超过 2.5 秒(计算机),而实验室数据的性能为 100,LCP 小于 1s?