为 ARM 编译的 chromium,未找到 libattr.so.1

为 ARM 编译的 chromium,未找到 libattr.so.1

环境。

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

问题

当尝试运行我的 chrome 可执行文件时,我得到以下信息:

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

打印共享库依赖,确实libattr.so.1没有找到

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)

我找到了一个libattr.so.1我复制到的库/usr/lib并创建了一个符号链接/lib

但chrome还是找不到。

我可以尝试什么来解决这个问题?

更新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

里德夫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

Readelf 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

或与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 (?)

显然我libattr没有使用正确的 ABI。我发现另一个库应该工作得更好这里

ARMHF libattr

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

答案1

您显示 的输出file libattr.so.1.1.0,但可执行文件正在寻找libattr.so.1.那不是同一个名字。通常libattr.so.1应该是一个符号链接libattr.so.1.1.0,而创建这个符号链接的正确方法是运行程序ldconfig。因此,请确保将libattr.so.1.1.0其放在所需的位置(/usr/local/lib这是一个好主意,/usr/lib对于包管理器安装的文件来说)并且已运行ldconfig.运行ldconfig -v并检查它是否告诉您它创建了所需的符号链接。

如果这不是问题,则您可能获取了不兼容的libattr.so.1.有几个ABIARM 上的指令,具体取决于允许程序使用哪些指令(允许程序使用更多指令将其限制为最新的高端处理器)。您的系统显然基于gnueabihf,即ARM EABI具有 GNU libc 和硬件浮点(“硬浮点”)支持 —臂氢夫Debian 的架构。确保它libattr.so.1也来自armhf,而不是来自armeabi(没有硬件浮点的ARM EABI)。您可以使用 来检查库(或可执行文件)的 ABI readelf -A libattr.so.1 libXau.so.6.0.0。特别注意Tag_ABI_VFP_args——值必须匹配。

相关内容