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

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

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

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 Autotools, а именно, Autoconf, Automake, Libtool, M4 и так далее. Я не верю, что Автоинструменты решат вашу проблему, и, даже если они это сделают, я сомневаюсь, что они сделают это так, чтобы осветить ваше понимание процесса. Автоинструменты могут быть полезны, но в вашем конкретном случае я бы пока не стал использовать автоинструменты. Сосредоточьтесь на других источниках, скорее.

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

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

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

Arghiaueohtnuea...

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

Другие вопросы по тегам