LINUX.ORG.RU

unrecognized relocation (0x2b) in section `.text'

 , , ,


0

1

Вопрос специалистам по binutils.

кросс-компилирую библиотеку на хосте убунту 16.04 x86_64 (jpeg-8c), таргет i686.

./configure --enable-static --build=i686-unknown-linux-gnu
CFLAGS="-m32"
LDFLAGS="-m32"

на выходе получаю libjpeg.a

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

если я пытаюсь точно так же линковать библиотеку в этот же проект на убунте 14.04 — получаю болт, ld ругается:

/usr/bin/ld: ../../static-deps/lib-x86-32/lib/libjpeg.a(jcapimin.o): unrecognized relocation (0x2b) in section `.text'
/usr/bin/ld: final link failed: Bad value

ранее эта библиотека собиралась на более старой убунте, и видимо, проблема в том, что ld от 14.04 не может сожрать библиотеку собранную на 16.04.

кто-нибудь может подсказать, что на самом деле происходит?

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

(edit: точнее, наверное, проще будет даунгрейдить свое локальное сборочное окружение на 14.04)

★★★★★

Последнее исправление: waker (всего исправлений: 2)

Подозреваю что в первом варианте не проставляется таргет и она компилируется как x64. Сделай file на либжпег.

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

Подозреваю что в первом варианте не проставляется таргет и она компилируется как x64. Сделай file на либжпег.

все проставляется, библиотека линкуется в 32битное приложение, и корректно работает, но та же операция фейлит на более новой убунте / новом ld. делать file на статическую либу как-то бессмысленно, не?

$ file jpeg-8c/.libs/libjpeg.a 
jpeg-8c/.libs/libjpeg.a: current ar archive

и да, предыдущая сборка той же самой либы, собранная на 14.04 - работает на обоих версиях убунты.

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

Ок, спасибо за инфу, наверное это оно есть, но обновить бинутилсы врядли получится.

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

Это другая реализация компоновщика. Если баг есть в ld, его может не быть в gold, и наоборот.

ну вобщем да, это стоит попробовать.. но насколько я понимаю, в gold есть много отличий от ld, которые надо сначала оттестировать на локалхосте, прежде чем пробовать в ci. не думаю, что через него сборка сработает без изменений.

waker ★★★★★
() автор топика
Ответ на: комментарий от anonymous

спасибо за подтверждение, я примерно это предполагал.

waker ★★★★★
() автор топика
./configure --enable-static --build=i686-unknown-linux-gnu
CFLAGS="-m32"
LDFLAGS="-m32"

--build= - это система, на которой ведется сборка, а не для которой генерится бинарник. Подозреваю из-за этого CFLAGS=-m32 и приходится передавать. Правильнее было бы:

./configure --enable-static --host=i686-unknown-linux-gnu

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

спасибо, учту на будущее, но к теме это отношения не имеет.

waker ★★★★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.