gpt4 book ai didi

c++ - 在 VxWorks 中使用 Boost C++ 库时出错

转载 作者:行者123 更新时间:2023-11-30 03:08:27 25 4
gpt4 key购买 nike

我试图在内核模式下使用 VxWorks 6.6 的 boost header-only Property Tree 库,当我加载DKM。有任何想法吗?如果我直接使用 std::runtime_error,我没有任何问题,但使用 Boost 我似乎收效甚微。

我真的很想使用 Boost,但似乎我遇到了很多问题。

最佳答案

请记住,当您使用 DKM 时,您只是在翻译单元上进行部分链接。这就是您的 DKM 中可能存在未解析符号的原因。

例如,如果您使用 printf,当 DKM 部分链接时,它不知道 printf 函数的地址是什么,因为它可能在不同的 vxWorks 图像之间发生变化。

当您加载 DKM 时,vxworks 动态加载器将查看 DKM 并找到 DKM 中所有未解析的符号并将它们与内核中的符号进行匹配。

我怀疑您遇到的是您的代码可能是基于模板的,它直到加载时才被实例化,并且模板的一部分引用了 runtime_error 类。

但是,由于您的代码没有显式实例化或使用 runtime_error 类,它在加载程序中显示为未解析的符号。在动态加载情况下,模板可能难以处理。

链接器认为:“没问题,动态加载器会处理好”。不幸的是,加载程序看到这个未解析的符号并大声说“嘿......我对 runtime_error 一无所知”。

这就是文档声明(解释)的原因:“对于 C++,您的 DKM 必须是自包含的(如在实现所有需要和使用的类中一样)并且不依赖于其他 DKM”。

有两种解决方案:
a) 像你一样做并明确使用缺少的组件。
b) 在你的基础 vxWorks 镜像中静态链接 DKM(这使得它不再是动态的或可下载的)

如果您使用 RTP(而不是 DKM),您就不会遇到这个特殊问题,因为 RTP 是完全链接的,而不是部分链接的。

关于c++ - 在 VxWorks 中使用 Boost C++ 库时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4993152/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com