在x86_64的Debian Jessie上交叉编译一个mipsel架构的程序,能静态链接的都静态链接了。
程序编译好传送到mipsel架构的设备上时,ldd查看库的依赖,却提示
1 |
/lib/mipsel-linux-gnu/libc.so.6: version `GLIBC_2.17' not found |
(⊙﹏⊙)b
mipsel设备上运行着Debian Wheezy,使用的是glibc 2.13:
1 2 |
# /lib/mipsel-linux-gnu/libc.so.6 GNU C Library (Debian EGLIBC 2.13-38+deb7u11) stable release version 2.13, by Roland McGrath et al. |
尝试了更新到glibc 2.17,结果运行所有动态链接glibc的程序都提示Segmentation fault或Bus error,眼看要变砖!!!∑(゚Д゚ノ)ノ,最后用一个静态链接版本的busybox救回来( ̄▽ ̄)~*。
换到Wheezy再交叉编译?然而Debian的Wiki:
ヽ(ー_ー)ノ,还不想自己编译gcc。
查找了下资料,没找到让gcc链接到自定义libc的方法。
查找了下资料,根据此文章:http://blog.csdn.net/hbuxiaofei/article/details/46012833,发现我交叉编译的程序也是clock_gettime()函数导致的,但是这作者你只提供分析方法却不提供解决方案算什么意思ヽ(ー_ー)ノ。
找了下这个函数的资料,发现除了glibc外,动态链接库librt有独立提供这个函数: https://stackoverflow.com/questions/2418157/ubuntu-linux-c-error-undefined-reference-to-clock-gettime-and-clock-settim,于是在g++编译参数中加入了-lrt,编译完成后,把程序传送到mipsel架构的设备上,再次ldd,没有了”`GLIBC_2.17′ not found”的提示,程序运行正常,成功解除对glibc 2.17的依赖(o゚▽゚)o :