如何在Raspbian Wheezy上安装不依赖新版glibc的GCC 4.8+版本
在Raspbian Wheezy上安装GCC 4.8+且不升级GLIBC的解决方案
绝对可以实现!我之前在树莓派Wheezy上遇到过一模一样的问题——要编译依赖C++11的代码(需要GCC≥4.8),但又不能动系统的GLIBC,不然编译出来的程序没法在其他同版本树莓派上跑。下面是亲测有效的步骤:
核心思路
Wheezy自带的GCC是4.6,GLIBC是2.13。我们要从源码编译GCC 4.8+,强制它链接系统原生的GLIBC,这样新GCC编译出来的二进制文件依然依赖旧版GLIBC,能在所有Wheezy树莓派上运行。
步骤1:安装编译依赖
先把编译GCC需要的工具包装全,打开终端执行:
sudo apt-get update sudo apt-get install build-essential flex bison libgmp-dev libmpfr-dev libmpc-dev texinfo
步骤2:下载并解压GCC源码
推荐选GCC 4.8.5(稳定版,对C++11支持足够),用wget下载:
wget https://ftp.gnu.org/gnu/gcc/gcc-4.8.5/gcc-4.8.5.tar.bz2 tar xjf gcc-4.8.5.tar.bz2 cd gcc-4.8.5
步骤3:配置编译参数(关键!)
这一步是确保不升级GLIBC的核心,创建一个单独的编译目录(避免污染源码),然后执行configure:
mkdir build && cd build ../configure --prefix=/usr/local/gcc48 \ --with-glibc-version=2.13 \ --enable-languages=c,c++ \ --disable-libstdcxx-pch \ --disable-multilib
参数解释:
--prefix:指定安装路径,不会覆盖系统自带的GCC--with-glibc-version=2.13:强制绑定Wheezy的GLIBC版本--enable-languages=c,c++:只编译C和C++,节省时间--disable-libstdcxx-pch:避免预编译头带来的兼容性问题--disable-multilib:关闭多架构支持,树莓派用不上
步骤4:编译并安装
树莓派性能有限,编译时间会很长(树莓派1可能要2-3小时,树莓派2/3快一些),用-j参数开启多线程:
# 树莓派1用-j1,树莓派2/3用-j2,树莓派4可以用-j4 make -j2 sudo make install
如果编译时提示内存不足,先临时加swap:
sudo fallocate -l 1G /swapfile sudo chmod 600 /swapfile sudo mkswap /swapfile sudo swapon /swapfile
编译完成后可以关掉swap:
sudo swapoff /swapfile sudo rm /swapfile
步骤5:使用新GCC编译代码
可以直接用绝对路径调用,或者设置环境变量让系统优先用新GCC:
# 临时生效(当前终端) export CC=/usr/local/gcc48/bin/gcc export CXX=/usr/local/gcc48/bin/g++ # 永久生效(添加到~/.bashrc) echo 'export CC=/usr/local/gcc48/bin/gcc' >> ~/.bashrc echo 'export CXX=/usr/local/gcc48/bin/g++' >> ~/.bashrc source ~/.bashrc
验证效果
编译完程序后,用ldd检查GLIBC依赖:
ldd your_program | grep glibc
应该显示libc.so.6 => /lib/arm-linux-gnueabihf/libc.so.6 (0x...,版本是2.13,说明没问题。
内容的提问来源于stack exchange,提问作者Mikey A. Leonetti
相关产品推荐
相关产品推荐

