gpt4 book ai didi

c - -mx32 GCcflags是否(正确)实现?

转载 作者:太空狗 更新时间:2023-10-29 16:08:39 26 4
gpt4 key购买 nike

我正在尝试构建一个与 32 位嵌入式系统通信的程序,该系统在基于 Linux 的 x86_64 机器(主机)上运行。在主机程序上,我有一个包含一些指针的结构,这些指针反射(reflect)了嵌入式系统上的相同结构。

问题在于,在主机上,指针本身是 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.34.7.0 20120120(实验)

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

编辑:根据 v4.4.7 manual , 没有可用的 -mx32 选项,直到 v4.6.3 都是如此. OTOH, v4.7.0确实显示该选项,所以我使用的 Jan-20 版本可能不是最终版本?!

最佳答案

不要这样做。首先,x32 是一个独立的架构。它不仅仅是一个编译器开关。您需要链接到的每个库的 x32 版本才能完成这项工作。 Linux 发行版还没有生产 x32 版本,所以这意味着您要么静态链接,要么滚动您自己的库环境。

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

关于c - -mx32 GCcflags是否(正确)实现?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10860367/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com