我试图安装一些新的软件包下openwrt使用opkg,安装已经成功,我们可以看到二进制文件确实存在于/ usr /斌,我有trird lld检查,但原来是相同的。 如下:
root@OpenWrt /usr/bin [#]# opkg files cfdisk Package cfdisk (2.25.2-4) is installed on root and has the following files: /usr/sbin/cfdisk root@OpenWrt /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 root@OpenWrt /usr/bin [#]# cfdisk -ash: cfdisk: not found root@OpenWrt /usr/bin [#]# ./cfdisk -ash: ./cfdisk: not found root@OpenWrt /usr/bin [#]# ldd cfdisk -ash: cfdisk: not found root@OpenWrt /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) root@OpenWrt /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' root@OpenWrt /usr/bin [#]#
谢谢。
正如在问题的评论中@nos所提到的,如果二进制文件与设备上不存在的libc链接,就会发生这种情况。
例如,这是当我尝试运行一个用错误的libc构建的二进制文件时得到的输出(请注意,我指定了完整路径/usr/bin/ldd
因为如果没有,由于某些原因,我得到的是相同的“未找到”错误你注意到你的问题)。
root@OpenWrt:~# /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
对我来说,问题是我正在使用错误的工具链构建我的包。 我假设git://git.openwrt.org/openwrt.git
回购是为Chaos Calmer(写作时的当前版本)。 但当然,回购是发展分支(SVN干线)。 我需要使用git://git.openwrt.org/15.05/openwrt.git
来代替。
您可以通过检查工具链目录staging_dir
的名称来确认正在建立的libc。 libc版本是该名称的最后一个组件(例如toolchain-mips_34kc+dsp_gcc-4.8-linaro_uClibc-0.9.33.2
正在使用uClibc-0.9.33.2)。
通过检查路由器上的/lib/libc.so*
链接(运行ls -l /lib/libc.so*
),将此版本与路由器上存在的libc版本进行比较。 如果您需要更改工具链使用的libc版本,请在OpenWRT buildroot中make menuconfig
,并在Advanced configuration options (for developers)
– > Toolchain Options
– > C Library implementation
设置libc版本。 您可能不需要更改此设置,但请确保您正在从路由器上安装的版本的正确源代码仓库构建。