LINUX.ORG.RU

build native arm binutils


0

1

день добрый!

собираю нативный binutils для arm926, и вот с чем столкнулся.

на x86 хосте имеется кросскомпилятор CodeSourcery. с его помощью я собираю нативные binutils c с такими опциями

../binutils-2.22/configure --prefix=/arm-lfs/tools --target=arm-none-linux-gnueabi --host=arm-none-linux-gnueabi --with-lib-path=/arm-lfs/tools/lib --with-sysroot=/arm-lfs --disable-nls --disable-werror

все собирается успешно и при попытке залить вновь созданные утилитки на плату - получаю, что glibc нужной нет!

делаю следующее, например, для AR, которую только что собрал

objdump -p ar

Version References:
  required from libgcc_s.so.1:
    0x0b792655 0x00 03 GCC_3.5
  required from libc.so.6:
    0x06969191 0x00 05 GLIBC_2.11
    0x0d696917 0x00 04 GLIBC_2.7
    0x0d696914 0x00 02 GLIBC_2.4

и вижу, что нужна GLIBC_2.11

самое интересное то, что на хосте, на котором я собирал стоит glibc именно этой версии, CodeSourcery toolchain имеет тоже свою версию и на плате у меня стоит другая версия glibc.

уже перепробовал линковать с конкретной версией

LDFLAGS=-Wl,-rpath,/board_nfs_path/lib и CFLAGS=-static 
... бесполезно.

вопрос, почему я компилирую кросскомпилятором binutils и он мне подцепляет glibc той версии, на машине которой я собираю?

кто может сказать, что не так

заранее благодарю



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

Наверное цепляет из тулчейна. Телепаты в отпуске, в общем. Недостаточно информации, чтобы дать разумный ответ.

slapin ★★★★★
()

смущает параметр host...

Насколько я помню, в нем надо указать систему, на которой идет сборка, то есть что-то типа i686-linux (более точно должно быть в configure --help).

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

Ну тогда оно волшебное. Ты не приводишь информации, как собирал, чем собирал, версию тулчейна, какие в нем библиотеки, что у тебя лежит в sysroot. а еще все NEEDED (readelf -a ... |grep NEEDED) из бинарника. то, что у тебя там версия символа из glibc-2.11 не говорит о том, что ему нужна именно 11-я либа, а может быть, например 12-я или позже.

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

нет! хост - это где будет выполняться бинарник таргет - это куда компилировать билд - это на чем собирать. то есть в нашем случает таргет равен билд.

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

билд - это на чем собирать

Тогда где задается --build=i686-linux?

Я конкретно binutils не собирал, но компилял кучу другой фигни под арм. Последнее, что было - tslib. Там конфиг выглядел так:

./configure --build=i386-linux --host=arm-linux --target=arm ...

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

и результат компиляции компилит для $target

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

> чего именно недостатточно?

много чего. версии кроскомпилятора, например.

> из тулчейна не цепляет - 100 %

ну да, конечно-конечно, 146%. оттуда он и цепляет её, скорее всего. в сорцери 2010-го года именно 2.11 и была.

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

завтра утром уточню версии тулчейна, сорцери 2011 года точно.

собирал с --host==arm-none-linux-gnueabi, --target такой же. --build=i686...

насколько я понимаю, с этими опциями все правильно, таргет - под какую архитектуру будет собираться будущими утилитками binutils, хост - где будет запускаться, билд - где собиралось.

но это вроде так, а вот в случае когда используется кросскомпилятор для сборки на i686?! проверял и для случая, когда хост и билд и таргет - все одинаковы, и все собирается кстати.

на боарде частично утилитки запускаются, но те, которые требуют глибси версии 2.7 и ниже...

lfs
() автор топика
Ответ на: комментарий от solovey

И да, таргет != билд, если я все правильно понял... Собираем на x86, запускаем на arm, нет?

да, хочу собрать нативные тулчейны для арма, собираю под х86 с помощью сорцери

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

в syssroot ничего не лежит, делаю по мануалу lfs, там написано, что сначало собирается бинутилс stage-1

lfs
() автор топика
Ответ на: комментарий от solovey

--target нужен только для тулчейнов если ты либы собираешь, --target нафиг не нужен. в большинстве случаев достаточно указать --host. Хотя правильнее указывать --host и --build.

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

приветствую, вот версии glibc, toolchain:

на x86, где производилась сборка

gcc:

Using built-in specs.
Target: i486-linux-gnu
Configured with: ../src/configure -v --with-pkgversion='Ubuntu 4.4.3-4ubuntu5' --with-bugurl=file:///usr/share/doc/gcc-4.4/README.Bugs --enable-languages=c,c++,fortran,objc,obj-c++ --prefix=/usr --enable-shared --enable-multiarch --enable-linker-build-id --with-system-zlib --libexecdir=/usr/lib --without-included-gettext --enable-threads=posix --with-gxx-include-dir=/usr/include/c++/4.4 --program-suffix=-4.4 --enable-nls --enable-clocale=gnu --enable-libstdcxx-debug --enable-plugin --enable-objc-gc --enable-targets=all --disable-werror --with-arch-32=i486 --with-tune=generic --enable-checking=release --build=i486-linux-gnu --host=i486-linux-gnu --target=i486-linux-gnu
Thread model: posix
gcc version 4.4.3 (Ubuntu 4.4.3-4ubuntu5) 

glibc:

ls -la /lib | grep libc-
-rwxr-xr-x  1 root root 1335560 2011-01-22 02:53 libc-2.11.1.so
lrwxrwxrwx  1 root root      14 2011-05-27 22:35 libc.so.6 -> libc-2.11.1.so

версия тулчейна:

CodeSourcery-2011.03-41:

arm-none-linux-gnueabi-gcc -v
Using built-in specs.
COLLECT_GCC=/CodeSourcery-2011.03-41/Sourcery_G++_Lite/bin/arm-none-linux-gnueabi-gcc
COLLECT_LTO_WRAPPER=/CodeSourcery-2011.03-41/Sourcery_G++_Lite/bin/../libexec/gcc/arm-none-linux-gnueabi/4.5.2/lto-wrapper
Target: arm-none-linux-gnueabi
Configured with: /scratch/janisjo/arm-linux-lite/src/gcc-4.5-2011.03/configure --build=i686-pc-linux-gnu --host=i686-pc-linux-gnu --target=arm-none-linux-gnueabi --enable-threads --disable-libmudflap --disable-libssp --disable-libstdcxx-pch --enable-extra-sgxxlite-multilibs --with-arch=armv5te --with-gnu-as --with-gnu-ld --with-specs='%{save-temps: -fverbose-asm} %{funwind-tables|fno-unwind-tables|mabi=*|ffreestanding|nostdlib:;:-funwind-tables} -D__CS_SOURCERYGXX_MAJ__=2011 -D__CS_SOURCERYGXX_MIN__=3 -D__CS_SOURCERYGXX_REV__=41 %{O2:%{!fno-remove-local-statics: -fremove-local-statics}} %{O*:%{O|O0|O1|O2|Os:;:%{!fno-remove-local-statics: -fremove-local-statics}}}' --enable-languages=c,c++ --enable-shared --enable-lto --enable-symvers=gnu --enable-__cxa_atexit --with-pkgversion='Sourcery G++ Lite 2011.03-41' --with-bugurl=https://support.codesourcery.com/GNUToolchain/ --disable-nls --prefix=/opt/codesourcery --with-sysroot=/opt/codesourcery/arm-none-linux-gnueabi/libc --with-build-sysroot=/scratch/janisjo/arm-linux-lite/install/arm-none-linux-gnueabi/libc --with-gmp=/scratch/janisjo/arm-linux-lite/obj/host-libs-2011.03-41-arm-none-linux-gnueabi-i686-pc-linux-gnu/usr --with-mpfr=/scratch/janisjo/arm-linux-lite/obj/host-libs-2011.03-41-arm-none-linux-gnueabi-i686-pc-linux-gnu/usr --with-mpc=/scratch/janisjo/arm-linux-lite/obj/host-libs-2011.03-41-arm-none-linux-gnueabi-i686-pc-linux-gnu/usr --with-ppl=/scratch/janisjo/arm-linux-lite/obj/host-libs-2011.03-41-arm-none-linux-gnueabi-i686-pc-linux-gnu/usr --with-host-libstdcxx='-static-libgcc -Wl,-Bstatic,-lstdc++,-Bdynamic -lm' --with-cloog=/scratch/janisjo/arm-linux-lite/obj/host-libs-2011.03-41-arm-none-linux-gnueabi-i686-pc-linux-gnu/usr --with-libelf=/scratch/janisjo/arm-linux-lite/obj/host-libs-2011.03-41-arm-none-linux-gnueabi-i686-pc-linux-gnu/usr --disable-libgomp --enable-poison-system-directories --with-build-time-tools=/scratch/janisjo/arm-linux-lite/install/arm-none-linux-gnueabi/bin --with-build-time-tools=/scratch/janisjo/arm-linux-lite/install/arm-none-linux-gnueabi/bin
Thread model: posix
gcc version 4.5.2 (Sourcery G++ Lite 2011.03-41) 

glibc из CodeSourcery-2011.03-41:

ls -ls arm-none-linux-gnueabi/libc/lib/ | grep libc-
-rwxrwxr-x 1 denis denis 1740481 2011-12-28 11:30 libc-2.13.so
lrwxrwxrwx 1 denis denis      12 2012-03-06 09:45 libc.so.6 -> libc-2.13.so

на самой плате, где тестирую, версия glibc такая:

ls -la /lib | grep libc-
-rwxrwxr-x 1 denis denis 1740481 2011-12-28 11:30 libc-2.8.so
lrwxrwxrwx 1 denis denis      12 2012-03-06 09:45 libc.so.6 -> libc-2.8.so

вывод objdump для только что собранного, например, ar:

objdump -p ./ar

./ar:     file format elf32-little

Program Header:
0x70000001 off    0x000928a4 vaddr 0x0009a8a4 paddr 0x0009a8a4 align 2**2
         filesz 0x00001f20 memsz 0x00001f20 flags r--
    PHDR off    0x00000034 vaddr 0x00008034 paddr 0x00008034 align 2**2
         filesz 0x00000100 memsz 0x00000100 flags r-x
  INTERP off    0x00000134 vaddr 0x00008134 paddr 0x00008134 align 2**0
         filesz 0x00000013 memsz 0x00000013 flags r--
    LOAD off    0x00000000 vaddr 0x00008000 paddr 0x00008000 align 2**15
         filesz 0x000947c4 memsz 0x000947c4 flags r-x
    LOAD off    0x000947c4 vaddr 0x000a47c4 paddr 0x000a47c4 align 2**15
         filesz 0x00000cfc memsz 0x0000502c flags rw-
 DYNAMIC off    0x000947d0 vaddr 0x000a47d0 paddr 0x000a47d0 align 2**2
         filesz 0x000000f0 memsz 0x000000f0 flags rw-
    NOTE off    0x00000148 vaddr 0x00008148 paddr 0x00008148 align 2**2
         filesz 0x00000020 memsz 0x00000020 flags r--
   STACK off    0x00000000 vaddr 0x00000000 paddr 0x00000000 align 2**2
         filesz 0x00000000 memsz 0x00000000 flags rw-

Dynamic Section:
  NEEDED               libgcc_s.so.1
  NEEDED               libc.so.6
  INIT                 0x000092c0
  FINI                 0x0007f568
  INIT_ARRAY           0x000a47c4
  INIT_ARRAYSZ         0x00000004
  FINI_ARRAY           0x000a47c8
  FINI_ARRAYSZ         0x00000004
  HASH                 0x00008168
  STRTAB               0x00008b28
  SYMTAB               0x00008498
  STRSZ                0x0000034e
  SYMENT               0x00000010
  DEBUG                0x00000000
  PLTGOT               0x000a48c0
  PLTRELSZ             0x000002e0
  PLTREL               0x00000011
  JMPREL               0x00008fe0
  REL                  0x00008fa8
  RELSZ                0x00000038
  RELENT               0x00000008
  VERNEED              0x00008f48
  VERNEEDNUM           0x00000002
  VERSYM               0x00008e76

Version References:
  required from libgcc_s.so.1:
    0x0b792655 0x00 03 GCC_3.5
  required from libc.so.6:
    0x06969191 0x00 05 GLIBC_2.11
    0x0d696917 0x00 04 GLIBC_2.7
    0x0d696914 0x00 02 GLIBC_2.4

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

еще хотел добавить, что as на плате запускается, а ar - нет, вот вывод запусков:

board: # ./ar
./ar: /lib/libc.so.6: version `GLIBC_2.11' not found (required by ./ar)
board: # ./as -v
GNU assembler version 2.22 (arm-linux) using BFD version (GNU Binutils) 2.22

вот вывод objdump для as:

root@ubuntu:/home/arm-lfs/tools/bin# objdump -p as

as:     file format elf32-little

Program Header:
0x70000001 off    0x000fcf78 vaddr 0x00104f78 paddr 0x00104f78 align 2**2
         filesz 0x00003388 memsz 0x00003388 flags r--
    PHDR off    0x00000034 vaddr 0x00008034 paddr 0x00008034 align 2**2
         filesz 0x00000100 memsz 0x00000100 flags r-x
  INTERP off    0x00000134 vaddr 0x00008134 paddr 0x00008134 align 2**0
         filesz 0x00000013 memsz 0x00000013 flags r--
    LOAD off    0x00000000 vaddr 0x00008000 paddr 0x00008000 align 2**15
         filesz 0x00100300 memsz 0x00100300 flags r-x
    LOAD off    0x00100300 vaddr 0x00110300 paddr 0x00110300 align 2**15
         filesz 0x000013d0 memsz 0x0000e2e0 flags rw-
 DYNAMIC off    0x0010030c vaddr 0x0011030c paddr 0x0011030c align 2**2
         filesz 0x000000f0 memsz 0x000000f0 flags rw-
    NOTE off    0x00000148 vaddr 0x00008148 paddr 0x00008148 align 2**2
         filesz 0x00000020 memsz 0x00000020 flags r--
   STACK off    0x00000000 vaddr 0x00000000 paddr 0x00000000 align 2**2
         filesz 0x00000000 memsz 0x00000000 flags rw-

Dynamic Section:
  NEEDED               libgcc_s.so.1
  NEEDED               libc.so.6
  INIT                 0x00009214
  FINI                 0x000c0e94
  INIT_ARRAY           0x00110300
  INIT_ARRAYSZ         0x00000004
  FINI_ARRAY           0x00110304
  FINI_ARRAYSZ         0x00000004
  HASH                 0x00008168
  STRTAB               0x00008ac4
  SYMTAB               0x00008484
  STRSZ                0x00000345
  SYMENT               0x00000010
  DEBUG                0x00000000
  PLTGOT               0x001103fc
  PLTRELSZ             0x000002b8
  PLTREL               0x00000011
  JMPREL               0x00008f5c
  REL                  0x00008f24
  RELSZ                0x00000038
  RELENT               0x00000008
  VERNEED              0x00008ed4
  VERNEEDNUM           0x00000002
  VERSYM               0x00008e0a

Version References:
  required from libgcc_s.so.1:
    0x0b792655 0x00 03 GCC_3.5
  required from libc.so.6:
    0x0d696917 0x00 04 GLIBC_2.7
    0x0d696914 0x00 02 GLIBC_2.4

lfs
() автор топика
Ответ на: комментарий от solovey

да нет, не секрет. просто нужно было загрузить ядро с теми либами glibc, с которыми кросс-компилятор линковал, она находятся в директории сорцери

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

Точно, я мог бы и раньше догадаться...

У меня похожий косяк был - я как-то собрал ядро и программу разными компиляторами, а потом долго думал... =)

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

угу,есть такое дело )) щас мучаюсь со сборкой gcc, думаю отдельную ветку создать, чуть позже создам

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