Ubuntu 20.04部署CryptDB编译时报g++-4.7未找到错误127如何解决
Ubuntu 20.04 编译CryptDB g++-4.7 缺失问题解决方案
报错核心原因:Ubuntu 20.04 官方软件源已移除 gcc 4.7 相关套件,直接通过默认源安装无法找到对应包,且旧版本gcc在新版系统下存在依赖兼容问题。
方案1:修改项目Makefile替换编译器(优先尝试,操作最简单)
- 进入
Practical-Cryptdb项目根目录,打开根目录下的Makefile文件 - 查找所有指定编译器的配置行,将
CC = gcc-4.7替换为系统已有的高版本gcc(如Ubuntu20.04默认的gcc-9),CXX = g++-4.7替换为对应的g++-9,修改后示例:
CC = gcc-9 CXX = g++-9
- 查找编译参数中的
-Werror配置,将其删除:高版本gcc的警告规则更严格,旧代码触发的警告会被-Werror判定为错误直接终止编译 - 可同时将编译参数中的
-std=c++0x替换为-std=c++11,提升高版本编译器的兼容性 - 保存修改后执行
make clean清理之前的编译缓存,再重新执行make命令编译即可
方案2:添加旧版本源手动安装g++-4.7
- 先备份系统原有源配置:
cp /etc/apt/sources.list /etc/apt/sources.list.bak - 编辑
/etc/apt/sources.list文件,在末尾添加Ubuntu 16.04(xenial)的软件源:
deb http://dk.archive.ubuntu.com/ubuntu/ xenial main deb http://dk.archive.ubuntu.com/ubuntu/ xenial universe
- 执行更新并安装对应套件:
apt update apt install -y gcc-4.7 g++-4.7
- 安装完成后执行
g++-4.7 --version验证安装是否成功,验证通过后即可回到项目目录重新编译 - 注意:编译完成后建议将刚才添加的xenial源注释或删除,避免后续系统更新时其他套件被意外降级引发故障
方案3:通过Docker使用Ubuntu 16.04环境编译(兼容性最佳,无依赖冲突)
- 首先在宿主机安装Docker:
apt install -y docker.io - 拉取Ubuntu 16.04官方镜像:
docker pull ubuntu:16.04 - 启动容器并将本地项目目录挂载到容器内:
docker run -it -v /root/Practical-Cryptdb:/data/Practical-Cryptdb ubuntu:16.04 /bin/bash
- 进入容器后执行环境配置:
apt update apt install -y gcc-4.7 g++-4.7 make libmysqlclient-dev libssl-dev
- 进入容器内的
/data/Practical-Cryptdb目录执行编译即可,编译完成后的产物可直接在容器内运行,也可以拷贝到宿主机使用
内容的提问来源于stack exchange,提问作者Thành Hoàng
相关产品推荐
相关产品推荐

