native-toolchain编译
- 克隆github上Cloudera提供的native-toolchain仓库:
git clone https://github.com/cloudera/native-toolchain.git
- 安装系统依赖
zypper install lsb-release,openssl-devel,libffi-devel,bzip2
zypper install --type pattern devel_basis
- 执行./buildall.sh,开始编译基础编译工具:GCC、CMake、Binutil等等;
若编译GCC时失败报错:
则修改如下代码文件,然后重新执行./buildall.sh:
// source/gcc/bak/gcc-7.5.0/libsanitizer/sanitizer_common/sanitizer_platform_limits_posix.cc
// 注释掉第1150行:
// CHECK_SIZE_AND_OFFSET(ipc_perm, mode);
若编译CMake时失败报错:
查看cmake_bootstrap.log,若其中存在报错:
unable to initialize decompress status for section .debug_aranges
则进入build/binutils-2.28/bin目录,执行以下操作,然后重新执行./buildall.sh:
mv ld ld.bak
ln -s /usr/bin/ld ld
编译LLVM时,可能出现与GCC相同的报错,需进行类似的修改,注释掉相同的CHECK函数;
python-2.7.16编译完成后,若手动执行/path/to/python -c "import struct"报错No module named _struct,说明python2编译存在问题(原因未知),可通过OS自带python进行规避,执行以下操作:
cd /path/to/python-2.7.16/bin
mv python python.bak
ln -s /usr/bin/python python
Impala编译
正常按照原步骤进行编译,若出现类似如下报错:
需重编译toolchain中的curl,具体操作:
cd /path/to/native-toolchain/source/curl/
vim build.sh
在wrap ./configure ...这行最后,添加--without-ssl --without-libidn2 --disable-ldap这几个flag:
wrap ./configure --with-pic --with-openssl --prefix=$LOCAL_INSTALL --without-ssl --without-libidn2 --disable-ldap
cd /path/to/native-toolchain
rm check/curl-7.78.0
在其他toolchain全部编译完成后可以执行./buildall.sh,或执行./build.sh curl单独编译。
若编译impala-shell时存在无法识别的gcc指令的报错,如:
gcc: error: unrecognized command line option ‘-fstack-clash-protection’;
说明GCC环境出现toolchain与系统GCC混用的情况,若系统GCC版本与Impala所需版本(7.5.0)相同,建议使用系统GCC进行规避:
cd toolchain/toolchain-packages-gcc7.5.0/gcc-7.5.0/bin
mv gcc gcc.bak
mv g++ g++.bak
ln -s /usr/bin/gcc gcc
ln -s /usr/bin/g++ g++
若进行了此操作,impala编译完成之后,需要把lib/libstdc++.so* 替换为/usr/lib64/libstdc++.so*(不同环境可能位置不同,可执行find /usr -name libstdc++.so*确认)。