Chrome

為 ARM 編譯的鉻,找不到 libattr.so.1

  • January 21, 2015

環境。

# 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

Readelf 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 庫

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

您顯示 的輸出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. ARM 上有幾個ABI,具體取決於允許程序使用哪些指令(允許程序使用更多指令將它們限制為最近的高端處理器)。您的系統顯然是基於ARM EABIgnueabihf的,它帶有 GNU libc 和硬體浮點(“硬浮點”)支持——Debian 的armhf架構。確保它也來自 armhf 而不是來自 armeabi(沒有硬體浮點的 ARM EABI)。您可以使用 . 檢查庫(或執行檔)的 ABI 。特別注意 - 值必須匹配。libattr.so.1``readelf -A libattr.so.1 libXau.so.6.0.0``Tag_ABI_VFP_args

引用自:https://unix.stackexchange.com/questions/180099