gpt4 book ai didi

c - 在 GCC 4.4 中,使用 long double 传递 union 的 ABI 发生了变化

转载 作者:太空狗 更新时间:2023-10-29 17:09:25 24 4
gpt4 key购买 nike

我有一个带有长双字段的 union 。

我初始化一个字段并将其传递给一个函数。

my_union foo;
foo.long_double = 10.10;
bar = baz(foo);

编译这段代码时我得到:

the ABI of passing union with long double has changed in GCC 4.4

似乎与此处提到的更改有关:http://gcc.gnu.org/gcc-4.4/changes.html

这是否意味着我不能通过具有 long double as 字段的 union ?为什么是这样?我该如何解决这个问题,因为我想使用 long double 来存储大值。

最佳答案

这意味着生成的代码与使用以前版本的 GCC 编译的代码不二进制兼容,因此如果您在使用当前版本和以前版本编译的二进制文件之间的库之间传递它,它将无法工作。 (有关网络传输和保存到文件的内存布局的信息,请参阅评论)

从您提供的链接可以看出:

用以前版本的 GCC 构建的代码使用其中任何一个与用 GCC 4.4.0 或更高版本构建的代码不兼容。

要么不这样做,要么确保所有使用更改日志中提到的 union 的代码都在相同的编译器版本(或技术上 ABI)上编译。

http://en.wikipedia.org/wiki/Application_binary_interface

关于c - 在 GCC 4.4 中,使用 long double 传递 union 的 ABI 发生了变化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16830928/

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