C头文件和ABI

3
我想知道C头文件和ABI的关系。各种类型的大小取决于体系结构甚至编译器。那么,如何可靠地链接到C库?
对于一个更具体的问题:当使用Haskell FFI时,甚至只需要使用Haskell类型(如CDouble)来定义(复制定义)C库接口。我不知道二进制类型大小信息来自哪里。有什么技巧可以使链接起作用?

这基本上是猜测。;-) 至少在 C 标准允许的范围内。 - firefrorefiddle
2个回答

0

库类型信息来自魔术宏,通过autoconf从C编译器中获取的信息插入其中。

例如,查看此处CDouble的定义:https://hackage.haskell.org/package/base-4.8.2.0/docs/src/Foreign.C.Types.html#CDouble

然后查看此处autoconf输入中HTYPE_DOUBLE大小的来源:https://hackage.haskell.org/package/base-4.8.2.0/src/include/HsBaseConfig.h.in

由于GHH针对编译器/架构进行编译(除了特殊的交叉编译器模式,这些模式在某些方面是新的和不同的,我还没有完全了解),因此这使得所有内容都与ABI正确地匹配。


0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接