libicu: часть библиотеки собирается с другим ABI

Модератор: Модераторы разделов

Ответить
IMB
Сообщения: 2561
ОС: Debian

libicu: часть библиотеки собирается с другим ABI

Сообщение IMB »

Доброго дня!
Собираю icu-57 для ODROID-C1 (Amlogic S805 CPU), использую gcc-linaro-arm-linux-gnueabihf-4.9-2014.09_linux toolchain на x64 хосте.

Код: Выделить всё

$ mkdir /tmp/icu_host && cd /tmp/icu_host
$ /tmp/icu/source/runConfigureICU Linux --with-library-bits=32
Running ./configure  --with-library-bits=32 for Linux using the clang or else GNU C++ compiler

checking for ICU version numbers... release 57.1, library 57.1, unicode version 8.0
checking build system type... x86_64-unknown-linux-gnu
checking host system type... x86_64-unknown-linux-gnu
................
checking size of void *... 8
checking whether runnable 64 bit binaries are built by default... yes
checking how to build 32-bit executables... yes
checking whether runnable 32-bit binaries are being built ... yes
checking which Makefile fragment to use for x86_64-unknown-linux-gnu... mh-linux
checking for floor in -lm... yes
........
$ make
$ mkdir /tmp/icu_target && cd /tmp/icu_target
CC=${CROSS_PREFIX}-gcc CXX=${CROSS_PREFIX}-g++ /tmp/s805/icu/source/configure --prefix=/usr --host=${CROSS_PREFIX} --with-cross-build=/tmp/icu_host
checking for ICU version numbers... release 57.1, library 57.1, unicode version 8.0
checking build system type... x86_64-unknown-linux-gnu
checking host system type... arm-unknown-linux-gnueabihf
...............
checking for unistd.h... yes
checking size of void *... 4
checking whether runnable 64 bit binaries are built by default... no
checking which Makefile fragment to use for arm-unknown-linux-gnueabihf... mh-linux
.............
$ make

Проверяю полученный файл

Код: Выделить всё

$ file lib/libicudata.so.57.1
lib/libicudata.so.57.1: ELF 32-bit LSB shared object, ARM, EABI5 version 1 (SYSV), dynamically linked, BuildID[sha1]=fbaa7f63ac1c7e0ad86786147eed2fefcd55a0a2, not stripped

Но qt5 не находит libicudata.so.57.1.
Запустил objdump и увидел нечто странное:

Код: Выделить всё

$ arm-linux-gnueabihf-objdump -p lib/libicui18n.so.57.1

lib/libicui18n.so.57.1:     file format elf32-littlearm

Program Header:
0x70000001 off    0x00217c94 vaddr 0x00217c94 paddr 0x00217c94 align 2**2
         filesz 0x0000ad38 memsz 0x0000ad38 flags r--
    LOAD off    0x00000000 vaddr 0x00000000 paddr 0x00000000 align 2**16
         filesz 0x002229d0 memsz 0x002229d0 flags r-x
    LOAD off    0x00223000 vaddr 0x00233000 paddr 0x00233000 align 2**16
         filesz 0x00008624 memsz 0x00008ca0 flags rw-
 DYNAMIC off    0x0022a198 vaddr 0x0023a198 paddr 0x0023a198 align 2**2
         filesz 0x00000128 memsz 0x00000128 flags rw-
    NOTE off    0x000000f4 vaddr 0x000000f4 paddr 0x000000f4 align 2**2
         filesz 0x00000024 memsz 0x00000024 flags r--
   STACK off    0x00000000 vaddr 0x00000000 paddr 0x00000000 align 2**4
         filesz 0x00000000 memsz 0x00000000 flags rw-

Dynamic Section:
  NEEDED               libicuuc.so.57
  NEEDED               libicudata.so.57
  NEEDED               libpthread.so.0
  NEEDED               libdl.so.2
  NEEDED               libstdc++.so.6
  NEEDED               libm.so.6
  NEEDED               libgcc_s.so.1
  NEEDED               libc.so.6
  SONAME               libicui18n.so.57
  SYMBOLIC             0x00000000
  INIT                 0x000bd140
  FINI                 0x001e4a84
  INIT_ARRAY           0x00233000
  INIT_ARRAYSZ         0x00000014
  FINI_ARRAY           0x00233014
  FINI_ARRAYSZ         0x00000004
  HASH                 0x00000118
  STRTAB               0x00036e9c
  SYMTAB               0x0001173c
  STRSZ                0x00074d4d
  SYMENT               0x00000010
  PLTGOT               0x0023a2c0
  PLTRELSZ             0x00001258
  PLTREL               0x00000011
  JMPREL               0x000bbee8
  REL                  0x000b0788
  RELSZ                0x0000b760
  RELENT               0x00000008
  VERNEED              0x000b06d8
  VERNEEDNUM           0x00000004
  VERSYM               0x000abbea
  RELCOUNT             0x00001312

Version References:
  required from libc.so.6:
    0x0d696914 0x00 05 GLIBC_2.4
  required from libstdc++.so.6:
    0x0bafd178 0x00 08 CXXABI_1.3.8
    0x08922974 0x00 07 GLIBCXX_3.4
    0x056bafd3 0x00 06 CXXABI_1.3
    0x0849afa3 0x00 04 CXXABI_ARM_1.3.3
  required from libgcc_s.so.1:
    0x0b792655 0x00 03 GCC_3.5
  required from libm.so.6:
    0x0d696914 0x00 02 GLIBC_2.4
private flags = 5000402: [Version5 EABI] [hard-float ABI] [has entry point]

$ arm-linux-gnueabihf-objdump -p lib/libicudata.so.57.1

lib/libicudata.so.57.1:     file format elf32-littlearm

Program Header:
    LOAD off    0x00000000 vaddr 0x00000000 paddr 0x00000000 align 2**16
         filesz 0x0187b040 memsz 0x0187b040 flags r--
    LOAD off    0x0187b040 vaddr 0x0188b040 paddr 0x0188b040 align 2**16
         filesz 0x00000074 memsz 0x00000074 flags rw-
 DYNAMIC off    0x0187b040 vaddr 0x0188b040 paddr 0x0188b040 align 2**2
         filesz 0x00000068 memsz 0x00000068 flags rw-
    NOTE off    0x000000d4 vaddr 0x000000d4 paddr 0x000000d4 align 2**2
         filesz 0x00000024 memsz 0x00000024 flags r--
   STACK off    0x00000000 vaddr 0x00000000 paddr 0x00000000 align 2**4
         filesz 0x00000000 memsz 0x00000000 flags rw-

Dynamic Section:
  SONAME               libicudata.so.57
  SYMBOLIC             0x00000000
  HASH                 0x000000f8
  STRTAB               0x000001d4
  SYMTAB               0x00000134
  STRSZ                0x00000058
  SYMENT               0x00000010
private flags = 5000200: [Version5 EABI] [soft-float ABI]

Вопрос - почему icudata собирается как soft-float?
Спасибо.
Спасибо сказали:
Ответить