CentOS7.5安装HAWQ遇编译错误求助:relocation R_X86_64_PC32问题
解决CentOS7.5下HAWQ编译的R_X86_64_PC32重定位错误
我来帮你搞定这个HAWQ编译的问题,这个错误我之前在CentOS7上编译大数据组件时也碰到过,核心是位置无关代码(PIC)的编译参数没正确生效,再加上之前的编译残留干扰,咱们一步步来解决:
第一步:彻底清理编译残留
之前的编译已经生成了不符合要求的目标文件,哪怕修改参数,make也可能复用旧文件,所以先彻底清空:
# 清理编译生成的目标文件 make clean # 清理configure生成的配置文件和缓存 make distclean
第二步:修正configure参数的拼写错误
你之前写的CFLAGES和CXXFLAGES是拼写错误!正确的参数名是CFLAGS和CXXFLAGS(少写了一个L),这直接导致-fPIC参数没被传递给编译器。推荐两种稳妥的参数传递方式:
方式一:直接在configure命令中指定
./configure CFLAGS="-fPIC" CXXFLAGS="-fPIC" --enable-shared
方式二:先设置环境变量(确保所有编译单元都继承参数)
export CFLAGS="-fPIC" export CXXFLAGS="-fPIC" ./configure --enable-shared
第三步:重新编译
为了避免编译过载,建议根据CPU核心数设置并行编译任务数,而非固定-j8:
# 先单线程编译确认错误消失(可选,用于排查问题) make # 确认没问题后,用全部核心编译 make -j$(nproc) # 最后执行安装 make install
如果还是报错:检查ORC依赖库的编译
错误日志里提到了lorc_format,说明HAWQ依赖的ORC库可能是静态编译且未加-fPIC参数,这时候需要手动重新编译ORC库:
# 克隆ORC源码(如果本地没有的话) git clone https://github.com/apache/orc.git cd orc mkdir build && cd build # 编译ORC时强制添加-fPIC参数 cmake -DCMAKE_C_FLAGS="-fPIC" -DCMAKE_CXX_FLAGS="-fPIC" .. make -j$(nproc) make install
回到HAWQ源码目录,重新configure时指定ORC的安装路径:
./configure CFLAGS="-fPIC" CXXFLAGS="-fPIC" --enable-shared --with-orc=/usr/local/orc
再重新编译安装即可。
错误原因补充
R_X86_64_PC32重定位错误是x86_64架构下的典型问题:当构建共享库时,所有参与链接的目标文件(包括依赖的静态库)都必须编译为位置无关代码(PIC),因为共享库会在运行时加载到任意内存地址,非PIC的代码无法适应这种动态加载机制。你之前的参数拼写错误导致-fPIC未生效,加上旧的编译残留,才会反复出现相同错误。
内容的提问来源于stack exchange,提问作者Accept
相关产品推荐
相关产品推荐

