-
Notifications
You must be signed in to change notification settings - Fork 22
关于OpenWrt的C链接库变更导致的那些事儿
Young edited this page Oct 28, 2019
·
3 revisions
OpenWrt大概在15.05版本(不含)之后,已经将默认C链接库(C Library)从原先的uClibc
换成了musl
。但,使用uClibc
SDK编译的二进制文件,是无法在使用musl
的系统版本里运行的,反之亦然,会提示not found
。
所以这里就有一个问题:你要根据你OpenWrt系统的C链接库类型(uClibc
或是musl
)正确选择对应的二进制文件,才能正常在你OpenWrt系统里跑起来。要是选错了,即使安装成功也是跑不起来的(故障现象是会提示not found
)。
对于使用OpenWrt官方固件的用户,这个问题很简单,一般只需要看系统版本(例如OpenWrt 18.06.0
)即可得知系统的C库是uClibc
或是musl
。低于15.05的是uClibc
,高于15.05的是musl
。然而对于使用第三方编译的OpenWrt固件的用户,看固件版本的方法可能不适用,因为第三方的开发者很可能会更改默认的C库,你猜不到。
因此本文提供一个方法给大家查看当前OpenWrt系统的C库是什么。
使用Putty
等虚拟终端软件连接OpenWrt路由器,然后输入:
ls /lib/ld*
提示:是ls
,不是1s
。实在看不清就复制粘贴吧。
你会看到类似下面的输出:
# 输出1
/lib/ld-musl-mipsel-sf.so.1
或者,类似下面的输出:
# 输出2
/lib/ld-uClibc-0.9.33.2.so /lib/ld-uClibc.so.0
显然,含有musl
字样的(如输出1
)即表明你当前的OpenWrt系统使用的是musl
C库,你选择musl
SDK编译的二进制文件(.ipk)即可;同理含有uClibc
字样的(如输出2
)即表明你当前的OpenWrt系统使用的是uClibc
C库,你选择uClibc
SDK编译的二进制文件(.ipk)即可。
讲完。