Ubuntu 18.04安装Thrift-0.14.2时make阶段报错求助
libboost_unit_test_framework.a缺失问题解决 问题背景
你在编译过程中执行make时遇到以下错误:
g++: error: /usr/lib/x86_64-none/libboost_unit_test_framework.a: No such file or directory
这个错误的核心原因是你误用了交叉编译参数--host=x86_64执行configure,该参数会让脚本错误识别系统库的搜索路径——Ubuntu 18.04的Boost静态库实际存放在/usr/lib/x86_64-linux-gnu/目录下。
另外你之前碰到的configure: error: cannot run C compiled programs错误,大概率是因为在Vagrant共享目录(/vagrant)下操作,共享目录的文件系统特性限制了configure执行编译生成的测试程序。
解决步骤
清理编译残留
进入已解压的Thrift目录,清理之前的编译生成文件和配置记录:make clean rm -rf config.log config.status移动Thrift目录到本地路径
将Thrift目录从共享目录迁移到虚拟机本地目录(比如用户主目录),避免文件系统限制:mv /vagrant/thrift-0.14.2 ~/ cd ~/thrift-0.14.2重新生成configure文件
由于你之前修改过configure.ac(删除了AC_FUNC_MALLOC和AC_FUNC_REALLOC),需要重新生成configure脚本:autoreconf -vfi重新执行configure(去掉交叉编译参数)
直接运行原生configure命令,无需添加--host=x86_64:./configure此时之前的"cannot run C compiled programs"错误会自动消失,因为操作目录切换到了本地路径。
修复符号右移问题
复用你之前的解决方案,在./lib/c_glib/src/thrift/config.h和./lib/cpp/src/thrift/config.h中添加:#define SIGNED_RIGHT_SHIFT_IS 1 #define ARITHMETIC_RIGHT_SHIFT 1重新执行编译
运行make完成编译:make若需要将Thrift安装到系统目录,后续可执行:
sudo make install
额外说明
- 交叉编译参数
--host仅用于在当前系统编译其他架构的程序,本机编译完全不需要该参数,误用会导致库路径识别混乱。 - Vagrant共享目录存在文件系统权限和特性限制,不适合执行编译操作,建议始终在虚拟机本地目录完成编译流程。
内容的提问来源于stack exchange,提问作者danielsunck

