【发布时间】:2012-11-03 12:58:30
【问题描述】:
我最近发现 instructions I had written 在 Windows 上编译 HDBC-postgresql 不再适用于 Haskell Platform 2012.2.0.0。库构建正常,但在尝试链接构建库时,cabal 失败:
我尝试使用dlltool --no-idata4 --no-idata5 重新制作libpq.a,但随后错误消息更改为Unknown PEi386 section name `.idata$7'。
这似乎是GHC bug 7103。
根据PE and COFF Specification,美元符号包含在部分名称中时具有特殊含义,表示“分组部分”。链接器应该丢弃“$”及其后面的所有字符以创建合并的.idata 部分,其中“$”后面的字符用于确定对合并部分的贡献的顺序。
有没有办法强制dlltool 不输出分组的部分?
或者,有没有办法获取 GNU 存档(A 文件),合并所有分组的部分,并输出生成的合并导入库 (imlib)?
编辑: Haskell Platform 2012.4.0.0 也会出现同样的错误。
EDIT2查看the source code of dlltool 后,似乎没有办法强制它不输出分组部分。另外,我还没有找到一个现成的实用程序,可以合并目标文件中的分组部分。
出于赏金和这个问题的目的,我将其更改为:如何在给定模块定义 (DEF) 文件的情况下构造单个 .idata 部分。
【问题讨论】:
-
尝试直接链接dll而不是链接导入库
标签: x86 ghc portable-executable unix-ar dlltool