[devel] Как победить eu-elflint с его unknown symbol binding?
Alexey Tourbin
at на altlinux.ru
Вт Май 11 11:53:08 UTC 2010
On Tue, May 11, 2010 at 02:42:48PM +0400, Ivan A. Melnikov wrote:
> Пытаюсь собрать boost 1.43.0, пока при помощи gear-rpm -ba в локальной
> системе (Сизиф x86_64). В конце сборки получаю кучу ошибок от
> eu-elflint (кусок лога ниже). Google и search.altlinux.org не помогли.
> Подскажите, пожалуйста, как с этим бороться.
elfutils плохо понимает новые символы STB_GNU_UNIQUE.
elfutils/libebl/eblsymbolbindingname.c:
83 if (binding >= STB_LOPROC && binding <= STB_HIPROC)
84 snprintf (buf, len, "LOPROC+%d", binding - STB_LOPROC);
85 else if (binding == STB_GNU_UNIQUE
86 && (ident = elf_getident (ebl->elf, NULL)) != NULL
87 && ident[EI_OSABI] == ELFOSABI_LINUX)
88 return "GNU_UNIQUE";
Кажется binutils всегда выставляет ident[EI_OSABI] в 0, то есть
generic System V ABI. ident[EI_OSABI] это восьмой байт в файле,
легко проверить. Например /usr/bin/perl:
00000000 7f 45 4c 46 02 01 01 00 00 00 00 00 00 00 00 00 |.ELF............|
В binutils код другой.
binutils/binutils/readelf.c:
7883 if (binding >= STB_LOPROC && binding <= STB_HIPROC)
7884 snprintf (buff, sizeof (buff), _("<processor specific>: %d"),
7885 binding);
7886 else if (binding >= STB_LOOS && binding <= STB_HIOS)
7887 {
7888 if (binding == STB_GNU_UNIQUE
7889 && (elf_header.e_ident[EI_OSABI] == ELFOSABI_LINUX
7890 /* GNU/Linux is still using the default value 0. */
7891 || elf_header.e_ident[EI_OSABI] == ELFOSABI_NONE))
7892 return "UNIQUE";
7893 snprintf (buff, sizeof (buff), _("<OS specific>: %d"), binding);
7894 }
> section [ 3] '.dynsym': symbol 632: unknown symbol binding
> section [ 3] '.dynsym': symbol 633: unknown symbol binding
> section [ 3] '.dynsym': symbol 638: unknown symbol binding
> verify-elf: WARNING: ./usr/lib64/libboost_math_tr1-st.so.1.43.0: eu-elflint failed
>
> [... skip ...]
>
> section [ 3] '.dynsym': symbol 1561: unknown symbol binding
> section [ 3] '.dynsym': symbol 1577: unknown symbol binding
> verify-elf: WARNING: ./usr/lib64/libboost_wave.so.1.43.0: eu-elflint failed
> ошибка: Неверный код возврата из /tmp/rpm-tmp.5122 (%install)
Тем не мене, это только warning.
Там ещё где-то должен быть error.
----------- следующая часть -----------
Было удалено вложение не в текстовом формате...
Имя : отсутствует
Тип : application/pgp-signature
Размер : 198 байтов
Описание: отсутствует
Url : <http://lists.altlinux.org/pipermail/devel/attachments/20100511/139bef4f/attachment.bin>
Подробная информация о списке рассылки Devel