环境。
# 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
——值必须匹配。