是否正确实现了-mx32 GCC标志?

时间:2012-06-02 06:35:24

标签: c pointers gcc 32bit-64bit x86-64

我正在尝试构建一个与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

幸运的是,我发现here 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(实验性)

为什么这个选项不起作用?有办法解决这个问题吗?

编辑:根据v4.4.7 manual,没有可用的-mx32选项,这一直属于v4.6.3。 OTOH,v4.7.0确实显示了这个选项,所以可能是我使用的Jan-20版本不是最终的版本?!

1 个答案:

答案 0 :(得分:6)

不要这样做。首先,x32是一个独立的架构。它不仅仅是一个编译器开关。您需要链接到的每个库的x32版本才能使其正常工作。 Linux发行版尚未生成x32版本,因此这意味着您将静态链接或滚动自己的库环境。

更广泛地说:那只是在寻找麻烦。如果你的结构包含指针,那么它们应该是指针。如果它包含“32位地址”,则它们应该是32位整数类型。