Clang和Visual C 结构兼容性问题
Clang and Visual C++ struct alignment compatibility issues
我们有一个问题结构内存包装和对齐。
Android并未兑现#pragma Pack(Push,< n>),该包在我们的代码库中数百个位置。这是原因。
Android clang编译器需要__属性__装饰器在结构或类上,例如:
struct __attribute__((packed, aligned(8))) Test
{
char a;
char b;
double d;
};
与视觉C 相反,尊敬的C :
#pragma pack(push, 8)
struct Test
{
char a;
char b;
double d;
};
#pragma pack(pop)
由于使用#Pragma Pack非常广泛,因此修复是一项耗时的任务。
我们尝试使用-mms -bitfields编译器标志,该编译器将设置默认结构布局与Microsoft编译器标准兼容(即它尊重#Pragma Pack)。但是,这仅适用于琐碎的结构,而不适用于基本类或虚拟功能的类。我们在这些类型的类中遇到以下错误。
"错误:MS_STRUCT可能不会为具有基础类或虚拟函数的类的Microsoft兼容布局[-WiNcompatible-MS-struct]"
我们如何减轻此问题 - 除了在推送和流行典礼之间浏览所有类别/结构并添加包装属性外,是否有任何解决方法可以使#pragma Pack适用于非平凡的结构/类工作?p>谢谢
首先,我有这样的印象,当您在代码中拥有"数百个占位"时,您的做法从根本上是错误的,您需要定义对齐方式以防止segfault。这个布拉格是非标准的,并且使用它并不普遍。最值得注意的是,像您一样广泛使用它并不普遍。它也不是标准。
无论如何,由于Clang会忽略Pragma,而MSVCC会忽略这些属性,因此我将两者都放在代码中。您可能会使用例如grep
和sed
可防止大量手动工作。
相关文章:
- 提升序列化 1:73 的向后兼容性问题
- C++ ABI 兼容性问题/张量流
- Oracle OCCI 和 g++ 7.1 的兼容性问题
- python 和 swig 版本兼容性问题
- Tensorflow C++ API 和 Caffe 兼容性问题与 Glog 相关
- 潜在 DLL 兼容性问题的摘要?
- D3DX10.H和D3DCOMPILER.H兼容性问题
- 类型定义之间的兼容性问题
- 在使用__file__,__line__时,是否存在任何兼容性问题
- Mac和Linux机器之间的正则兼容性问题
- Clang和Visual C 结构兼容性问题
- 从C结构继承的可能兼容性问题
- UNICODESTRING兼容性问题
- 错误:在armadillo和oracle occi兼容性问题中,对"剑"的引用不明确
- box2d光线投射向后兼容性问题
- .NET 和 Linux 之间的 GUID/UUID 兼容性问题
- Boost::asio-winsock和winsock 2的兼容性问题
- 使用控制台的可视C++:while 循环的字符/字符串兼容性问题
- 7-Zip源代码兼容性问题
- Java本机接口(JNI)是否受到c++ ABI兼容性问题的影响