我想知道C头文件和ABI如何相关。各种类型的大小都是体系结构,甚至依赖于编译器。那么如何可靠地链接到C库?C头文件和ABI
对于更具体的问题:使用Haskell的FFI时,甚至只使用像CDouble
这样的Haskell类型来定义(复制C库接口的定义)。我不知道二进制大小信息来自哪里。连接工作有什么窍门?
我想知道C头文件和ABI如何相关。各种类型的大小都是体系结构,甚至依赖于编译器。那么如何可靠地链接到C库?C头文件和ABI
对于更具体的问题:使用Haskell的FFI时,甚至只使用像CDouble
这样的Haskell类型来定义(复制C库接口的定义)。我不知道二进制大小信息来自哪里。连接工作有什么窍门?
请访问以下链接https://code.google.com/p/tabi
它可以帮助你避免与Haskell和C.
库类型信息来自正在运行中插入信息从抓住魔术宏之间可能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绑定。
这基本上是猜测。 ;-)至少在C标准允许的范围内。 – firefrorefiddle