LINUX.ORG.RU

Как собрать crtbegin.o с -fPIE ?

 , ,


0

1
/usr/lib/gcc/x86_64-pc-linux-gnu/6.4.0/../../../../x86_64-pc-linux-gnu/bin/ld: /usr/lib/gcc/x86_64-pc-linux-gnu/6.4.0/crtbegin.o: relocation R_X86_64_32 against hidden symbol `__TMC_END__' can not be used when making a shared object
/usr/lib/gcc/x86_64-pc-linux-gnu/6.4.0/../../../../x86_64-pc-linux-gnu/bin/ld: final link failed: Nonrepresentable section on output
collect2: error: ld returned 1 exit status
make[2]: *** [../Rules:194: /var/tmp/portage/sys-libs/glibc-2.27-r6/work/build-amd64-x86_64-pc-linux-gnu-nptl/iconv/iconv_prog] Error 1
make[2]: *** Waiting for unfinished jobs....
make[1]: *** [Makefile:216: iconv/others] Error 2
make: *** [Makefile:9: all] Error 2
 * ERROR: sys-libs/glibc-2.27-r6::gentoo failed (compile phase):

crtbegin.o относится к пакету
$ qfile /usr/lib/gcc/x86_64-pc-linux-gnu/6.4.0/crtbegin.o
sys-devel/base-gcc (/usr/lib/gcc/x86_64-pc-linux-gnu/6.4.0/crtbegin.o)

я ему прописывал
mkdir -p /etc/portage/env/sys-devel
echo 'CFLAGS=«$CFLAGS -fPIC»' >/etc/portage/env/sys-devel/base-gcc-6.4.0-r1
и пересобирал
emerge sys-devel/base-gcc

Ответ на: комментарий от mord0d

загляни в файл, и увидь там неразвёрнутый $CFLAGS.

Ну я вообще так и хотел, чтобы он был неразвёрнутый

Мне так насоветовали:
<eroen> make a file `/etc/portage/env/<category>/<packagename>-<version>` and put CFLAGS=«$CFLAGS -fPIC» in it
<eroen> for all the docs, you can open `man 5 portage` and search for «package-specific bashrc»
<eroen> things set in /etc/env.d will (probably) be overridden by the settings in your make.conf

Einstok_Fair ★★ ()
Последнее исправление: Einstok_Fair (всего исправлений: 1)
Ответ на: комментарий от Einstok_Fair

<eroen> make a file `/etc/portage/env/<category>/<packagename>-<version>` and put CFLAGS=«$CFLAGS -fPIC» in it

Оно переназначает, но я не уверен, что у тебя $CFLAGS вообще разворачивает. Попробуй вначале назначить переменную в окружении (она не назначена в окружении, потому прописывай полностью), и только потом прописывай её в env.

things set in /etc/env.d will (probably) be overridden by the settings in your make.conf

Тут да.

mord0d ()
Ответ на: комментарий от mord0d

Я не понял как вот это:

Попробуй вначале назначить переменную в окружении (она не назначена в окружении, потому прописывай полностью), и только потом прописывай её в env.

проделать.

Я могу взять значение из

$ grep "CFLAGS" /etc/portage/make.conf
CFLAGS="-O2 -march=x86-64 -pipe" # -ftree-vectorize ${GRAPHITE}"
CXXFLAGS="${CFLAGS}"

И просто вписать его в тот файл вместо $CFLAGS

т.е.

# cat /etc/portage/env/sys-devel/base-gcc-6.4.0-r1
CFLAGS="-O2 -march=x86-64 -pipe -fPIC"

но я не уверен, что это всё, что туда надо вписывать

Einstok_Fair ★★ ()
Последнее исправление: Einstok_Fair (всего исправлений: 2)
Ответ на: комментарий от i-rinat

В смысле?

поищи тут по форуму своё сообщение про то «зачем тебе вообще отвечать, ты никогда не помогаешь и т.д.». Если найдёшь, то я тебе его отквочу. А так - придётся довольствоваться пересказом.

Einstok_Fair ★★ ()
Ответ на: комментарий от mord0d

на пользу пошло

Это фантастика. У него перманентная XY problem, и он ничего не хочет с этим делать. Возможно, он просто наслаждается теми нездоровыми обсуждениями, которые в его темах происходят.

i-rinat ★★★★★ ()
Ответ на: комментарий от i-rinat

У него перманентная XY problem, и он ничего не хочет с этим делать.

И из-за этого он считает отвечающих некомпетентными. «Я такой умный, я знаю в чём у меня проблема, а ты мне какую-то дичь втираешь!»

Да и треды у него упоротые.

Кстати, он уже создал новый тред про pie. xD

mord0d ()

Если не хочешь сломать систему fPIC в CFLAGS лучше не добавляй. Это как минимум ломает GCC и glibc. Лучше исправь систему сборки, которая ругается на не-pic код.

anonymous ()