/usr/bin/ld.gold: ошибка: /usr/lib/gcc/x86_64-linux-gnu/6/crtbeginT.o: требуется динамический R_X86_64_32 - PullRequest
0 голосов
/ 04 февраля 2019

Я сталкиваюсь со следующей ошибкой при попытке скомпилировать статический исполняемый файл 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)

Я полагаю, что столкнулся с этой проблемой из-за создания статической сборки.Ранее динамическая сборка была успешной.

Как я мог решить эту проблему?Я не думаю, что я что-то скомпилировал вручную.Вот Dockerfile из образа докера, который я использую: https://github.com/freebroccolo/docker-haskell/blob/03467e1a14543d83d33833e669249a3c42f7b7c8/8.6/Dockerfile

Я использую Debian Stretch (9).

Возможно, это ошибка в соответствии с: https://bugs.launchpad.net/ubuntu/+source/gcc-4.4/+bug/640734


Я пытался добавить --ghc-options='-fPIC к stack 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

Ответы [ 2 ]

0 голосов
/ 05 февраля 2019

Arghiaueohtnuea ...

У меня было ghc-options: -O2 -dynamic в моем файле клики ... Удаление, кажется, исправило все

0 голосов
/ 04 февраля 2019

Мой ответ, вероятно, неполный, но, пока не появится более полный ответ, мы можем начать со следующего:

1. Руководство GCC. К сожалению, Debian и Фонд свободного программного обеспечения имеют немного противоречивые представления о том, что такое свободное программное обеспечение.В данный момент руководство GCC может помочь вам, но оно было выделено по незначительным техническим юридическим причинам в несвободный архив Debian.

Это противоречит духу Debian - советовать кому-либоустановить из не бесплатно, не так ли?Скажу только, что я установил руководство GCC из non-free на свою собственную коробку 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 update и apt-get install gcc-doc, затем info gcc.)

2. Опции для GCC. В руководстве GCC вы можете открыть главу «Вызов GCC», открыть раздел «Опции Code Gen» и нажать / для поиска -fPIC.Это краткое и техническое объяснение, но оно начинает ваше расследование в нужном месте.(Даже если объяснение не имеет смысла для вас сейчас, вы вернетесь к нему позже.)

3. Руководство по упаковке библиотек Debian от Uekawa. Однако наиболее яркий документ - это секрет.Это стандартный документ Debian, известный разработчикам Debian, который по непонятным причинам не упакован в Debian, поэтому не разработчики обычно не знают об этом. Здесь это.

В связанном документе рассказывается, как работают эти библиотеки, как их компилировать и связывать, и так далее.Однако, если вам нужно знать больше ....

4. Спецификация ELF.

В них подробно описывается формат, в котором создается GCC, и ld.gold ссылки.

5. Автоинструменты. В какой-то момент ваше расследование может привести вас к автоинструментам GNU, а именно, Autoconf, Automake, Libtool, M4 и так далее.Я не верю, что Автоинструменты решат вашу проблему, и даже если они это сделают, я сомневаюсь, что они сделали бы это так, чтобы осветить ваше понимание процесса.Автоинструменты могут быть полезны, но в вашем конкретном случае я бы пока не стал использовать автоинструменты.Скорее сосредоточьтесь на других источниках.

По общему признанию, кто-то там, вероятно, знает более прямой ответ на ваш вопрос, но, на момент написания этой статьи, этот человек еще не опубликовал.Между тем, если вам нужно исследовать это для себя, мой ответ дал источники.Чтение тех, что я бы сделал.Хотя я и не программист на Haskell, прочитав их, я решил подобные проблемы с ссылками в прошлом.Это стандартные источники.

Чтение является наиболее познавательным и широко полезным в любом случае, поэтому оно не будет тратить ваше время.

(Я бы порекомендовал вам избегать принять мой ответ, даже если вы решите поднять его. Ваш вопрос - хороший вопрос. Мы хотим, чтобы этот вопрос оставался открытым до тех пор, пока он не получит более прямой ответ, чем у меня.)

...