2015-07-13 24 views
5

opkg kullanarak openwrt altında bazı yeni yazılım paketi yüklemeye çalışıyorum ve yükleme başarılı oldu ve biz görebilirsiniz İkili dosya gerçekten/usr/bin'de var ve lld kontrolüne bakıyorum ama aynı çıkıyor. aşağıdaki gibi:ELF dosyası/usr/bin var, ancak "-ash: dosya: bulunamadı"

[email protected] /usr/bin [#]# opkg files cfdisk 
Package cfdisk (2.25.2-4) is installed on root and has the following files: 
/usr/sbin/cfdisk 
[email protected] /usr/bin [#]# ls /usr/sbin/ 
adjtimex    arping     ethtool     iptables-save   mkfs.ext3    pppd     telnetd 
airbase-ng    besside-ng    fdisk     iw      mkfs.ext4    rate.awk    uhttpd 
aireplay-ng    brctl     hostapd     iwconfig    modinfo     rmmod     wpa_supplicant 
airmon-ng    cfdisk     insmod     iwlist     modprobe    samba_multicall   wpad 
airmon-zc    chroot     ip6tables    iwpriv     nmbd     smbd     xtables-multi 
airodump-ng    crond     ip6tables-restore  lsmod     ntpclient    smbpasswd 
airodump-ng-oui-update dnsmasq     ip6tables-save   miniupnpd    ntpd     swapoff 
airserv-ng    dropbear    iptables    mke2fs     odhcp6c     swapon 
airtun-ng    e2fsck     iptables-restore  mkfs.ext2    pdnsd     tc 
[email protected] /usr/bin [#]# cfdisk 
-ash: cfdisk: not found 
[email protected] /usr/bin [#]# ./cfdisk 
-ash: ./cfdisk: not found 
[email protected] /usr/bin [#]# ldd cfdisk 
-ash: cfdisk: not found 
[email protected] /usr/bin [#]# ldd id 
     libcrypt.so.0 => /lib/libcrypt.so.0 (0x77898000) 
     libm.so.0 => /lib/libm.so.0 (0x77872000) 
     libgcc_s.so.1 => /lib/libgcc_s.so.1 (0x7784e000) 
     libc.so.0 => /lib/libc.so.0 (0x777e2000) 
     ld-uClibc.so.0 => /lib/ld-uClibc.so.0 (0x778bc000) 
[email protected] /usr/bin [#]# export 
export HOME='/root' 
export LOGNAME='root' 
export OLDPWD='/usr' 
export PATH='/usr/bin:/usr/sbin:/bin:/sbin' 
export PS1='\[\033[35;1m\]\u\[\033[0m\]@\[\033[31;1m\]\h \[\033[32;1m\]$PWD\[\033[0m\] [\[\033[35m\]\#\[\033[0m\]]\[\033[31m\]\$\[\033[0m\] ' 
export PWD='/usr/bin' 
export SHELL='/bin/ash' 
export SHLVL='1' 
export SSH_CONNECTION='192.168.1.152 29105 192.168.1.1 22' 
export SSH_TTY='/dev/pts/0' 
export TERM='xterm' 
export USER='root' 
[email protected] /usr/bin [#]# 

Teşekkürler.

+1

Muhtemelen cfdisk dosyanızın mevcut olmayan dinamik bir bağlayıcısına bağlı olması (başka bir deyişle, ld-uClibc.so.0'dan başka bir şey) .Bir ikili üzerinde 'readelf -a' komutunu çalıştırın, "program yorumlayıcısını" arayın – nos

+0

teşekkürler @ nos, readelf henüz yüklemedim. Bu dosyayı benim ubuntu sistemime kopyalayayım mıyım? cadı kendini kontrol etti ve muhtemelen linux sürümünün yol açtığını düşünüyorum. "ld-uClibc.so.0 "ldd cfdisk" ile karşılaştırmak için "id" olarak "lld id" komutu. – coder

+0

Elbette, istediğiniz yerde ikili üzerinde çalıştırın. Ben ldd id 'ld-uClibc.so.0' gösterir beri o zaman bu kütüphane var diyorum. Ve, cfdisk'iniz muhtemelen bunu kullanmıyor, fakat makinenizde olmayan başka bir dinamik bağlayıcı var. Muhtemelen cfdisk'in başka bir uClibc sürümü veya başka bir C kütüphanesi ile derlenmesi nedeniyle. – nos

cevap

1

@nos tarafından belirtildiği gibi, soru hakkındaki yorumlarda, cihazınızda bulunmayan bir libc ile ikili bağlantı kurulduğunda bu durum ortaya çıkabilir.

örn. Bu yanlış libc ile inşa edilmiş bir ikili çalıştırmayı denediğimde elde ettiğim çıktı (/usr/bin/ldd tam yolunu belirttiğimi not et), çünkü bir sebepten dolayı aynı "bulunamadı" hatasıyla karşılaştınız.).

[email protected]:~# /usr/bin/ldd badbin 
ldd: can't open cache '/etc/ld.so.cache' 
checking sub-depends for '/usr/lib/libusb-1.0.so.0' 
checking sub-depends for '/lib/libgcc_s.so.1' 
checking sub-depends for 'not found' 
    libusb-1.0.so.0 => /usr/lib/libusb-1.0.so.0 (0x00000000) 
    libgcc_s.so.1 => /lib/libgcc_s.so.1 (0x00000000) 
    libc.so => not found (0x00000000) 
    not a dynamic executable 

Benim için sorun, yanlış bir takım zincirini kullanarak paketimi oluşturuyor olmama neden oldu. git://git.openwrt.org/openwrt.git repo'nun Chaos Calmer (yazım sırasındaki mevcut sürüm) için olduğunu varsaymıştım. Ama tabii ki bu repo gelişme dalıdır (svn trunk). Bunun yerine git://git.openwrt.org/15.05/openwrt.git kullanmam gerekiyordu. araç zinciri dizininin ismini kontrol ederek hangi libc'yi kullandığınızı onaylayabilirsiniz. Libc sürümü, ismin son bileşenidir (ör., toolchain-mips_34kc+dsp_gcc-4.8-linaro_uClibc-0.9.33.2, uClibc-0.9.33.2 kullanıyor).

Bu sürümü, yönlendiricinizde bulunan /lib/libc.so* bağlantılarını denetleyerek (ls -l /lib/libc.so* çalıştır) yönlendiricinizde bulunan libc sürümüyle karşılaştırın. Takım zinciriniz tarafından kullanılan libc sürümünü değiştirmek isterseniz, OpenWRT buildroot'ta make menuconfig yapın ve libc sürümünü Advanced configuration options (for developers) ->Toolchain Options ->C Library implementation olarak ayarlayın. Muhtemelen bu ayarı değiştirmeniz gerekmemelidir - yönlendiricinizde kurulu olan sürüm için doğru kaynak repodan oluşturduğunuzdan emin olun.

+0

Evet, sonunda gcc versiyonunu eşleştirerek çalışın, çok teşekkürler! Bu arada, en yeni gcc'yi kullanarak yönlendiricim için başka araçlar oluşturdum ve gcc seçeneği ekleyerek çalışır. -Wl, -rpath,/boxer/lib -Wl , - dinamik-linker,/boxer/lib/ld-linux.so.3 ve libc.so'yu/kozmopolit bir yere/boxer/lib/* gibi – coder

İlgili konular