C++ 使用Boost C+时出错+;使用VxWorks的库

C++ 使用Boost C+时出错+;使用VxWorks的库,c++,boost,vxworks,C++,Boost,Vxworks,我试图在内核模式下使用VxWorks 6.6的boost header only属性树库,当我加载DKM时,我得到了一个未定义的符号,表示std::runtime\u error::~runtime\u error。有什么想法吗?如果我直接使用std::runtime\u error,我没有问题,但是使用Boost我似乎没有什么成功 我真的很想使用Boost,但似乎我遇到了很多问题。请记住,当您使用DKMs时,您只在您的翻译单元上进行部分链接。 这就是为什么在DKM中可以有未解析的符号 例如,如

我试图在内核模式下使用VxWorks 6.6的boost header only属性树库,当我加载DKM时,我得到了一个未定义的符号,表示
std::runtime\u error::~runtime\u error
。有什么想法吗?如果我直接使用
std::runtime\u error
,我没有问题,但是使用Boost我似乎没有什么成功


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

请记住,当您使用DKMs时,您只在您的翻译单元上进行部分链接。 这就是为什么在DKM中可以有未解析的符号

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

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

我怀疑您遇到的是,您的代码可能是基于模板的,在加载时和部分模板引用了runtime_error类之前,它不会被实例化

但是,由于您的代码没有显式实例化或使用runtime_error类,因此它将作为未解析的符号显示给加载程序。在动态加载情况下,模板可能是一个需要处理的问题

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

这就是为什么文档说明(释义):“对于C++,您的DKM必须是独立的(如实现所有需要使用的类),而不依赖其他DKM”。 有两种解决方案可用:
a) 像以前一样,明确使用缺少的组件。
b) 静态链接基本vxWorks映像中的DKM(这使其不再是动态的或可下载的)


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

请记住,当您使用DKMs时,您只在翻译单元上进行部分链接。 这就是为什么在DKM中可以有未解析的符号

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

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

我怀疑您遇到的是,您的代码可能是基于模板的,在加载时和部分模板引用了runtime_error类之前,它不会被实例化

但是,由于您的代码没有显式实例化或使用runtime_error类,因此它将作为未解析的符号显示给加载程序。在动态加载情况下,模板可能是一个需要处理的问题

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

这就是为什么文档说明(释义):“对于C++,您的DKM必须是独立的(如实现所有需要使用的类),而不依赖其他DKM”。 有两种解决方案可用:
a) 像以前一样,明确使用缺少的组件。
b) 静态链接基本vxWorks映像中的DKM(这使其不再是动态的或可下载的)


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

我想我的措辞很糟糕,但是如果包含Boost libs,直接使用
std::runtime\u error
仍然不起作用。只有完全删除Boost libs,它才有效。我想我的措辞很糟糕,但是如果包含Boost libs,直接使用
std::runtime\u error
仍然不起作用。只有完全删除Boost libs,它才能工作。