sil*_*orb 5 c++ compilation class declaration static-linking
我正在尝试使用不使用命名空间的第三方C++库,并导致符号冲突.冲突的符号用于我的代码没有使用的类,所以我考虑为第三方库创建自定义头文件,其中类声明仅包括我的代码使用的公共成员,而忽略使用冲突类的任何成员.基本上创建一个界面.
我有三个问题:
如果.obj文件的编译工作,当我进行链接时,这种技术是否会导致符号冲突?
如果这不是问题,那么变化的类声明会在链接时引起问题吗?例如,链接器是否验证每个.obj文件使用的类的声明是否具有相同数量的成员?
如果这些都不是问题而且我能够链接.obj文件,它会在调用方法时引起问题吗?我不确切知道C++是如何工作的,但如果它使用索引指向类方法,并且那些索引从一个.obj文件到另一个不同,我猜这种方法会在运行时爆炸.
理论上,您需要相同的声明才能使其发挥作用。
在实践中,您肯定需要确保您的声明包含:
您还需要按照正确的声明顺序执行所有这些操作。
您可能可以伪造数据成员,但需要确保放入具有相同大小的存根。
如果您不执行所有这些操作,您将不会获得相同的对象布局,即使链接有效,它也会在运行时严重且快速地失败。
如果你这样做,对我来说仍然有风险,最坏的情况可能看起来可行,但会出现奇怪的运行时故障。
“如果它使用索引”:在某种程度上,虚拟函数的工作方式是由实现定义的,但通常它确实使用虚拟函数表的索引。
您可能可以做的是:
归档时间: |
|
查看次数: |
246 次 |
最近记录: |