C/CPP, Unix Like

解除clock_gettime@@GLIBC_2.17的依赖

在x86_64的Debian Jessie上交叉编译一个mipsel架构的程序,能静态链接的都静态链接了。

程序编译好传送到mipsel架构的设备上时,ldd查看库的依赖,却提示

(⊙﹏⊙)b

mipsel设备上运行着Debian Wheezy,使用的是glibc 2.13:

尝试了更新到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  :