加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > Windows > 正文

x86 – 如何在Windows上解决GHC错误“Unknown PEi386 section na

发布时间:2020-12-14 05:41:37 所属栏目:Windows 来源:网络整理
导读:我最近发现在 Windows上编译HDBC-postgresql的 instructions I had written不再使用Haskell Platform 2012.2.0.0.该库构建正常,但在尝试链接构??建的库时,cabal失败: Loading package HDBC-postgresql-2.3.2.1 ... ghc.exe: Unknown PEi386 section name `.
我最近发现在 Windows上编译HDBC-postgresql的 instructions I had written不再使用Haskell Platform 2012.2.0.0.该库构建正常,但在尝试链接构??建的库时,cabal失败:

Loading package HDBC-postgresql-2.3.2.1 ... ghc.exe: Unknown PEi386 section name
 `.idata$4' (while processing: C:/PROGRA~1/POSTGR~1/9.2/liblibpq.a)
ghc.exe: panic! (the 'impossible' happened)
  (GHC version 7.4.1 for i386-unknown-mingw32):
        loadArchive "C:/PROGRA~1/POSTGR~1/9.2/liblibpq.a": failed

我尝试用dlltool –no-idata4 –no-idata5重新制作libpq.a,但随后错误信息改为Unknown PEi386部分名称`.idata $7′.

这似乎是GHC bug 7103.

根据PE and COFF Specification,美元符号在包含在部分名称中时具有特殊含义,表示“分组部分”.链接器应该丢弃“$”及其后面的所有字符以创建合并的.idata节,其中“$”后面的字符用于确定对合并节的贡献顺序.

有没有办法强制dlltool不输出分组部分?

或者,有没有办法获取GNU存档(A文件),合并所有分组的部分,并输出生成的合并导入库(implib)?

编辑:Haskell Platform 2012.4.0.0发生了同样的错误.

EDIT2在查看the source code of dlltool之后,似乎没有办法强制它不输出分组部分.此外,我还没有找到一个现成的实用程序,它将合并目标文件中的分组部分.

出于赏金和这个问题的目的,我将其更改为:如何在给定模块定义(DEF)文件的情况下构造单个.idata部分.

解决方法

The linker is supposed to discard the “$” and all characters that follow it to create a merged .idata section

是的,但这只是Microsoft链接器的默认行为.我在你的工具链上没有足够的速度,所以只是一些提示. gcc链接器需要显式配置将各种.idata $x节合并为单个.idata节.这是由SECTION指令完成的.在看似由脚本完成的mingw中,可以使用样本here.请注意脚本的这一部分:

.idata BLOCK(__section_alignment__) :
  {
    /* This cannot currently be handled with grouped sections.
        See pe.em:sort_sections.  */
    SORT(*)(.idata$2)
    SORT(*)(.idata$3)
    /* These zeroes mark the end of the import list.  */
    LONG (0); LONG (0); LONG (0); LONG (0); LONG (0);
    SORT(*)(.idata$4)
    __IAT_start__ = .;
    SORT(*)(.idata$5)
    __IAT_end__ = .;
    SORT(*)(.idata$6)
    SORT(*)(.idata$7)
  }

相当不可思议,但鞋子适合.确保链接器使用此类脚本.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读