编译Apache Hadoop时hadoop-hdfs-native-client模块构建失败求助
解决AUR构建Apache Hadoop中hadoop-hdfs-native-client的编译失败问题
针对你遇到的cmake-compile目标make错误码2、OpenSSL 3.0 MD5 API废弃、Protobuf ByteSize()废弃警告这些问题,以下是具体修复步骤:
1. 处理OpenSSL 3.0兼容性问题
OpenSSL 3.0将MD5等旧哈希算法移入了legacy provider,默认不启用,导致编译时找不到相关符号:
- 编辑hadoop-hdfs-native-client模块的
CMakeLists.txt,在target_link_libraries配置中添加OpenSSL::Legacy; - 或者在AUR包的
PKGBUILD里,给cmake命令追加参数:-DOPENSSL_USE_LEGACY_PROVIDER=ON \
2. 修复Protobuf ByteSize()废弃问题
Protobuf 3.x+标记ByteSize()为废弃接口,替换为ByteSizeLong(),这可能是触发编译失败的直接原因:
- 搜索native client代码中所有
ByteSize()调用,全局替换为ByteSizeLong(); - 若使用AUR包,可创建补丁文件(比如
fix-protobuf-bytesize.patch)批量替换,然后在PKGBUILD的prepare()阶段添加补丁应用命令:patch -Np1 -i "${srcdir}/fix-protobuf-bytesize.patch"
3. 强制指定C++标准版本
Hadoop的native客户端通常基于C11开发,新环境默认用C17可能引发兼容性问题:
- 在
CMakeLists.txt中添加:set(CMAKE_CXX_STANDARD 11) set(CMAKE_CXX_STANDARD_REQUIRED ON) - 或者在
PKGBUILD的cmake参数中追加:-DCMAKE_CXX_STANDARD=11 \
额外排查步骤
如果上述操作后仍失败,查看更详细的编译日志(执行make VERBOSE=1)定位具体报错的代码行,确认是否还有其他依赖版本兼容问题。
内容的提问来源于stack exchange,提问作者dominikm
相关产品推荐
相关产品推荐

