2013-08-07 51 views
3

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

对于更具体的问题:使用Haskell的FFI时,甚至只使用像CDouble这样的Haskell类型来定义(复制C库接口的定义)。我不知道二进制大小信息来自哪里。连接工作有什么窍门?

+0

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

回答

0

库类型信息来自正在运行中插入信息从抓住魔术宏之间可能ABI差异困难C编译器由autoconf。

例如,见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编译对编译器/拱它编译(除了在特殊的交叉编译模式下,这些模式是新的,并且我不完全了解这些模式),这使得所有的东西都能正确地与ABI绑定。