眾所周知西壮,glibc已經(jīng)成為了Linux二進(jìn)制程序在各種發(fā)行版之間不兼容的重要因素了,究其原因,是glibc的版本兼容性機(jī)制凰兑。比如在高版本glibc的Linux機(jī)器上編譯和鏈接的二進(jìn)制,在低版本glibc的Linux運(yùn)行會(huì)報(bào)如下錯(cuò)誤:
/lib64/libc.so.6: version `GLIBC_2.14' not found
并且审丘,glibc做靜態(tài)鏈接時(shí)會(huì)出現(xiàn)比較奇怪的問(wèn)題(nss等)吏够,所以各發(fā)行版一致不推薦glibc靜態(tài)鏈接。那么目前比較好的方案是滩报,需要發(fā)行的應(yīng)用锅知,在比較低版本的glibc做編譯和鏈接。
而Rust官方提供了cross這個(gè)工具做交叉編譯的工作露泊,而常用的tagetx86_64-unknown-linux-gnu
的glibc版本為2.15喉镰,對(duì)于某些老到掉牙的發(fā)行版來(lái)說(shuō),可能還是會(huì)有兼容性問(wèn)題惭笑,所以我基于Centos6打包了一個(gè)鏡像:https://hub.docker.com/repository/docker/jmjoy/cross侣姆,內(nèi)置的glibc版本為2.12。
使用方法:
在Cross.toml中:
[target.x86_64-unknown-linux-gnu]
image = "jmjoy/cross:x86_64-linux-centos6"