chromium compilado para o ARM, libattr.so.1 não encontrado

1

Env.

# uname -a
Linux FriendlyARM 3.0.8-FriendlyARM #1 PREEMPT Tue Oct 30 10:33:04 CST 2012 armv7l GNU/Linux

Problema

Ao tentar executar meu executável chrome, estou recebendo isto:

[root@FriendlyARM chromium]# ./chrome
./chrome: error while loading shared libraries: libattr.so.1: cannot open shared object file: No such file or directory

Imprimir dependências da biblioteca compartilhada, de fato libattr.so.1 não foi encontrado

ldd ./chrome

...
libp11-kit.so.0 => /usr/lib/arm-linux-gnueabihf/libp11-kit.so.0 (0x469ab000)
libXau.so.6 => /usr/lib/arm-linux-gnueabihf/libXau.so.6 (0x469be000)
libXdmcp.so.6 => /usr/lib/arm-linux-gnueabihf/libXdmcp.so.6 (0x469c8000)
libattr.so.1 => not found      <======= NOT FOUND
libgpg-error.so.0 => /lib/arm-linux-gnueabihf/libgpg-error.so.0 (0x469d3000)

Encontrei uma biblioteca libattr.so.1 que copiei para /usr/lib e criei um link simbólico para /lib

mas o Chrome ainda não consegue encontrá-lo.

O que eu poderia tentar consertar isso?

ATUALIZAÇÃO 20150120

file libXau.so.6.0.0
debian_wheezy_arm-sysroot/usr/lib/arm-linux-gnueabihf/libXau.so.6.0.0: ELF 32-bit LSB shared object, ARM, version 1 (SYSV), dynamically linked, BuildID[sha1]=0xcbd329ab335e695742bac844bfcb02c83e8fac78, stripped

file libattr.so.1.1.0
libattr.so.1.1.0: ELF 32-bit LSB shared object, ARM, version 1 (SYSV), dynamically linked, not stripped

Leia-se libattr

$ readelf -A libattr.so.1.1.0 
Attribute Section: aeabi
File Attributes
  Tag_CPU_name: "7-A"
  Tag_CPU_arch: v7
  Tag_CPU_arch_profile: Application
  Tag_ARM_ISA_use: Yes
  Tag_THUMB_ISA_use: Thumb-1        <=====
  Tag_FP_arch: VFPv3
  Tag_Advanced_SIMD_arch: NEONv1    <=====
  Tag_ABI_PCS_wchar_t: 4
  Tag_ABI_FP_denormal: Needed
  Tag_ABI_FP_exceptions: Needed
  Tag_ABI_FP_number_model: IEEE 754
  Tag_ABI_align_needed: 8-byte
  Tag_ABI_align_preserved: 8-byte, except leaf SP
  Tag_ABI_enum_size: int
  Tag_ABI_HardFP_use: SP and DP    <=============
  Tag_ABI_optimization_goals: Aggressive Speed

Leia-se libXau

vagrant@vagrant:/vagrant_data$ readelf -A libXau.so.6.0.0 
Attribute Section: aeabi
File Attributes
  Tag_CPU_name: "7-A"
  Tag_CPU_arch: v7
  Tag_CPU_arch_profile: Application
  Tag_ARM_ISA_use: Yes
  Tag_THUMB_ISA_use: Thumb-2      <=====
  Tag_FP_arch: VFPv3-D16
  Tag_ABI_PCS_wchar_t: 4
  Tag_ABI_FP_denormal: Needed
  Tag_ABI_FP_exceptions: Needed
  Tag_ABI_FP_number_model: IEEE 754
  Tag_ABI_align_needed: 8-byte
  Tag_ABI_align_preserved: 8-byte, except leaf SP
  Tag_ABI_enum_size: int
  Tag_ABI_HardFP_use: SP and DP   <=======
  Tag_ABI_VFP_args: VFP registers
  Tag_ABI_optimization_goals: Aggressive Speed
  Tag_DIV_use: Not allowed

ou com grep FP

vagrant@vagrant:/vagrant_data$ readelf -A libattr.so.1.1.0  | grep FP
  Tag_FP_arch: VFPv3
  Tag_ABI_FP_denormal: Needed
  Tag_ABI_FP_exceptions: Needed
  Tag_ABI_FP_number_model: IEEE 754
  Tag_ABI_HardFP_use: SP and DP

vagrant@vagrant:/vagrant_data$ readelf -A libXau.so.6.0.0 | grep FP
  Tag_FP_arch: VFPv3-D16
  Tag_ABI_FP_denormal: Needed
  Tag_ABI_FP_exceptions: Needed
  Tag_ABI_FP_number_model: IEEE 754
  Tag_ABI_HardFP_use: SP and DP
  Tag_ABI_VFP_args: VFP registers    <===== CONFIRM it's ARMHF (?)

Aparentemente, meu libattr não está usando a ABI correta. Eu encontrei outra biblioteca que deveria funcionar melhor aqui

libattr ARMHF

vagrant@vagrant:/vagrant_data/libattr-2.4.47-armhf-1/lib$ readelf -A libattr.so.1.1.0 | grep FP
  Tag_FP_arch: VFPv3-D16
  Tag_ABI_FP_denormal: Needed
  Tag_ABI_FP_exceptions: Needed
  Tag_ABI_FP_number_model: IEEE 754
  Tag_ABI_HardFP_use: SP and DP
  Tag_ABI_VFP_args: VFP registers
    
por zabumba 20.01.2015 / 17:52

1 resposta

2

Você mostra a saída de file libattr.so.1.1.0 , mas o executável está procurando por libattr.so.1 . Esse não é o mesmo nome. Normalmente, libattr.so.1 deve ser um link simbólico para libattr.so.1.1.0 , e o caminho certo para criar este link simbólico é executar o programa ldconfig . Portanto, certifique-se de colocar libattr.so.1.1.0 onde você quiser ( /usr/local/lib seria uma boa ideia, /usr/lib é para arquivos instalados pelo gerenciador de pacotes) e que você executou ldconfig . Execute ldconfig -v e verifique se ele criou o link simbólico desejado.

Se esse não é o problema, é possível que você tenha encontrado um libattr.so.1 incompatível. Existem vários ABI s no ARM, dependendo de quais instruções os programas podem usar (permitindo que os programas usem mais instruções para limitá-los para processadores high-end recentes). Seu sistema é evidentemente baseado em gnueabihf , ou seja, ARM EABI com o GNU libc e com suporte a ponto flutuante de hardware (“hard float”) - a armhf arquitetura do Debian. Certifique-se de que libattr.so.1 também seja de armhf e não, e. de armeabi (ARM EABI sem ponto flutuante de hardware). Você pode verificar o ABI que uma biblioteca (ou um executável) é para com readelf -A libattr.so.1 libXau.so.6.0.0 . Procure, em particular, por Tag_ABI_VFP_args - os valores devem corresponder.

    
por 21.01.2015 / 00:52