Chrome
為 ARM 編譯的鉻,找不到 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
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