/usr/bin/ld.gold:错误:/usr/lib/gcc/x86_64-linux-gnu/6/crtbeginT.o:需要动态R_X86_64_32

问题描述 投票:2回答:2

我尝试编译静态Haskell的可执行文件时遇到了以下错误:

/usr/bin/ld.gold: error: /usr/lib/gcc/x86_64-linux-gnu/6/crtbeginT.o: requires dynamic R_X86_64_32 reloc against '__TMC_END__' which may overflow at runtime; recompile with -fPIC
collect2: error: ld returned 1 exit status
`gcc' failed in phase `Linker'. (Exit code: 1)

我相信我遇到这个问题,因为创建一个静态的构建。动态构建成功之前。

我怎么能解决这个问题?我不认为我手动编译任何东西。下面是我使用的泊坞窗图像Dockerfilehttps://github.com/freebroccolo/docker-haskell/blob/03467e1a14543d83d33833e669249a3c42f7b7c8/8.6/Dockerfile

我运行Debian拉伸(9)。

似乎可能是根据一个错误:https://bugs.launchpad.net/ubuntu/+source/gcc-4.4/+bug/640734


我试着加入--ghc-options='-fPICstack build但也失败了:

 /usr/bin/ld.gold: error: /usr/lib/gcc/x86_64-linux-gnu/6/crtbeginT.o: requires dynamic R_X86_64_32 reloc against '__TMC_END__' which may overflow at runtime; recompile with -fPIC
    collect2: error: ld returned 1 exit status
    `gcc' failed in phase `Linker'. (Exit code: 1)
The command '/bin/sh -c stack build --ghc-options='-fPIC -optl-static -optl-pthread' --force-dirty --copy-bins' returned a non-zero code: 1
haskell debian haskell-stack crt fpic
2个回答
2
投票

我的回答可能并不完全,但是,直到出现一个更完整的答案,我们可以用下面的开始。

1. GCC手册。 Debian和自由软件基金会不幸的是对什么是自由软件稍有冲突的理解。 GCC手册可以帮助你的那一刻,但手册已经分离出了轻微的,技术性的法律理由Debian的非自由存档。

它违背了Debian的精神,建议任何人从非自由安装,不是吗?我只会说,我已经安装了GCC手册从非自由对我自己的Debian框如下所示。在/etc/apt/sources.list中:

deb     http://mirror.us.leaseweb.net/debian/ stretch main contrib non-free
deb-src http://mirror.us.leaseweb.net/debian/ stretch main contrib non-free

(你可以列出哪个镜像你喜欢,但LEASEWEB的是不比任何人差。)然后,apt-get updateapt-get install gcc-doc,其次是info gcc。)

2.选项GCC。在GCC手册,你可以打开章“调用GCC,”打开一节“代码生成选项”,然后按/搜索-fPIC。解释有简洁和技术,但它开始在正确的地方你的调查。 (即使解释没有意义的,你现在,你会稍后返回。)

3. Uekawa的Debian的库包装指南。然而,最有启发性的文件是有些秘密。这是一个标准的Debian文档,已知Debian开发人员,这对于模糊的原因并不在Debian的包装,所以非开发人员通常不知道这件事情。 Here它。

该链接的文档会告诉你这些库是如何工作的,怎么一编译和链接它们,等等。但是,如果您需要了解更多....

4. ELF规范。

这些细节到GCC构建和ld.gold链接的格式。

5.自动工具。在某些时候,你的调查可能会导致你对GNU Autotools - 即的Autoconf,Automake的,Libtool程序,M4,等等。我不相信自动工具将解决您的问题,并且,即使他们这样做,我怀疑他们会做的方式,点亮你的认识过程。自动工具是有用的,但是,你的具体情况,我会避免追求Autotools的暂时。专注于其他来源,而。

诚然,有人在那里可能知道一个更直接的回答你的问题,但截至发稿时,那人还没有公布。同时,如果你需要研究它自己,我的回答给了来源。阅读这些是我会做什么。虽然不是一个Haskell程序员,读那些是我已经解决了过去的类似链接的问题。这些都是标准的来源。

阅读是最的教育,是在任何情况下广泛有用的,所以它不会浪费你的时间。

(我建议你避免接受我的答案,即使你选择给予好评的。你的问题是一个很好的问题。我们希望,直到它已得出比我更直接的回答这个问题保持开放。)


1
投票

Arghiaueohtnuea ...

我在小集团文件有ghc-options: -O2 -dynamic ...删除此似乎已经解决了一切

© www.soinside.com 2019 - 2024. All rights reserved.