我正在尝试构建一个与 32 位嵌入式系统通信的程序,该程序在基于 Linux 的 x86_64 机器(主机)上运行。在主机程序上,我有一个包含一些指针的结构,这些指针反映了嵌入式系统上的相同结构。
问题是在主机上,指针本身是 64 位的,所以结构成员的偏移量与嵌入式系统中的不一样。因此,当复制结构(作为 memcpy)时,内容最终会出现在主机副本中的错误位置。
struct {
float a;
float b;
float *p;
float *q;
} mailbox;
// sizeof(mailbox) is 4*4=16 on the embedded, but 2*4+2*8=24 on the host
幸运的是,我在这里发现 gcc 有一个-mx32
在 x86_64 机器上生成 32 位指针的选项。但是,当尝试使用它时,我收到一条错误消息:
$ gcc -mx32 test.c -o test.e
cc1: error: unrecognized command line option "-mx32"
这适用于 gcc 版本4.4.3和4.7.0 20120120 (experimental)。
为什么这个选项不起作用?有没有解决的办法?
编辑:根据v4.4.7 手册,没有可用的 -mx32 选项,直到v4.6.3都是如此。OTOH,v4.7.0确实显示了该选项,所以我使用的 Jan-20 版本可能不是最终版本?!