请教高手 arm-elf-gcc 2.95.3版本的结构体紧凑编译的问题。
请教高手,代码如下:
{
typedef struct testnopack{
char c[2];
}testnopack;
typedef struct testwithpack{
char c[2] __attribute__ ((packed));
}testwithpack __attribute__ ((packed));
printk("weiwei debug test testnopack = %d. testwithpack=%d\n", sizeof(testnopack), sizeof(testwithpack));
}
当我用arm-elf-gcc 编译的时候 打印的得到的结果都是 4, 当我加上 -fpack-struct 编译标志的时候,打印的得到的结果都变成了 2,
对结构
typedef struct testnopack{
char c[2];
}testnopack;
我是不希望编译器对它进行紧凑编译的,希望它在编译的时候能够自动补齐,长度能为4。
请教高手,我该如何做啊,先跪谢了
我的交叉编译器的版本是
[email=windy@linux:~/8620L/ag621/ag621pci]windy@linux:~/8620L/ag621/ag621pci[/email]> arm-elf-gcc -v
Reading specs from /home/windy/8620L/armutils_2.5.113.0/toolchain/lib/gcc-lib/arm-elf/2.95.3/specs
gcc version 2.95.3 20010315 (release)
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(5)
typedef struct testwithpack{
char c[2];
}testwithpack __attribute__ ((packed));
_______________________
这样呢?
帅哥, 这种情况我也试过了,我现在遇到的问题可能是我用 2.95.3版本 arm-elf-gcc 编译器 对 __attribute__ ((packed)) 不起作用 了, 代码在另外的一个平台上 用 xscale_be-gcc 编译可以达到想要的效果(结构体想紧凑的就紧凑,想让它自动补齐就自动补齐)
weiwei@localhost.localdomaindevel(PerphectAP).../AG3120> /opt/hardhat/devkit/arm/xscale_be/bin/xscale_be-gcc -v
Reading specs from /opt/hardhat/devkit/arm/xscale_be/lib/gcc-lib/armv5teb-hardhat-linux/3.2.1/specs
现在要把它 移植到uclinux嵌入式系统上,这个交叉编译系统用的是 2.95.3 arm-elf-gcc 编译器。
请大哥们救命啊。
高手们 , 出来解答一下好吗?这个问题已经困扰小弟好久了,
先跪谢了。
这样试一下:
typedef struct testwithpack{
char c;
}__attribute__ ((packed)) testwithpack;
如果没办法的话,既然是“移植”,改变一些代码还是有点必要的