3

我想知道 C 头文件和 ABI 之间的关系。各种类型的大小是体系结构甚至编译器相关的。那么如何可靠地链接到 C 库呢?

对于一个更具体的问题:当使用 Haskell 的 FFI 时,甚至只使用 Haskell 类型CDouble来定义(复制定义)C 库接口。我不知道二进制类型大小信息来自哪里。使链接工作的技巧是什么?

4

2 回答 2

0

请参阅此链接https://code.google.com/p/tabi

它可以帮助您避免 Haskell 和 C 之间可能存在的 ABI 差异的困难。

于 2013-08-07T15:44:27.013 回答
0

库类型信息来自运行以插入由 autoconf 从 C 编译器获取的信息的魔术宏。

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

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

由于 GHH 是针对编译器/arch 进行编译的(除了特殊的交叉编译器模式,这些模式是新的并且在我不完全了解的方式上有所不同),这使得一切都与 ABI 正确绑定。

于 2016-03-07T09:24:29.897 回答