之所以要在容器内编译,主要是一台arm编译服务器大家共用,避免一些编译工具包的安装影响其他人编译,所以在容器内进行。下面正式开始:
目录
libpqxx报stream_from相关告警的处理
not a git repository报错处理
make时报conflicting types for 'eventfd'
make时报objcopy:Zulu.o: Invalid bfd target
make时报error: no template named 'auto_ptr' in namespace 'std'
Make时报variable 'update_place_value' set but not used
Make时报parameter ‘size’ set but not used [-Werror=unused-but-set-parameter]
Make时报parameter passing for argument of type ‘xxx’ changed in GCC 9.1
make时报/bin/sh^M: bad interpreter: No such file or directory
make时报错./StorageSystemLicenses.sh: not found
本机更改docker镜像源
vi /etc/docker/daemon.json
{ "registry-mirrors": [ "https://mirrors.huaweicloud.com/" "https://registry.docker-cn.com", "http://hub-mirror.c.163.com", "https://docker.mirrors.ustc.edu.cn" ], "insecure-registries": [ "https://mirrors.huaweicloud.com/" "https://registry.docker-cn.com", "http://hub-mirror.c.163.com", "https://docker.mirrors.ustc.edu.cn" ] } |
systemctl daemon-reload
systemctl restart docker
运行并配置centos镜像
docker pull securityneo/neokylin:openjdk18 docker run -itd --network=host -v /home/clickhouse/ckdir:/home/clickhouse/ckdir securityneo/neokylin:openjdk18 docker ps |grep kylin docker exec -it 569aac8191c7 bash #其中569aac8191c7为上一步查出来的容器ID。 |
yum源配置:
cp -a /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.bak
wget -O /etc/yum.repos.d/CentOS-Base.repo https://repo.huaweicloud.com/repository/conf/CentOS-AltArch-7.repo
或者直接将如下内容放到/etc/yum.repos.d/CentOS-Base.repo中。
[base] name=CentOS-$releasever - Base - mirrors.huaweicloud.com baseurl=https://repo.huaweicloud.com/centos-altarch/7/os/$basearch/ #mirrorlist=https://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=os gpgcheck=0 gpgkey=https://repo.huaweicloud.com/centos-altarch/7/os/$basearch/RPM-GPG-KEY-CentOS-7-$basearch #released updates [updates] name=CentOS-$releasever - Updates - mirrors.huaweicloud.com baseurl=https://repo.huaweicloud.com/centos-altarch/7/updates/$basearch/ #mirrorlist=https://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=updates gpgcheck=0 gpgkey=https://repo.huaweicloud.com/centos-altarch/7/os/$basearch/RPM-GPG-KEY-CentOS-7-$basearch #additional packages that may be useful [extras] name=CentOS-$releasever - Extras - mirrors.huaweicloud.com baseurl=https://repo.huaweicloud.com/centos-altarch/7/extras/$basearch/ #mirrorlist=https://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=extras gpgcheck=0 gpgkey=https://repo.huaweicloud.com/centos-altarch/7/os/$basearch/RPM-GPG-KEY-CentOS-7-$basearch #additional packages that extend functionality of existing packages [centosplus] name=CentOS-$releasever - Plus - mirrors.huaweicloud.com baseurl=https://repo.huaweicloud.com/centos-altarch/7/centosplus/$basearch/ #mirrorlist=https://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=centosplus gpgcheck=0 enabled=0 gpgkey=https://repo.huaweicloud.com/centos-altarch/7/os/$basearch/RPM-GPG-KEY-CentOS-7-$basearch |
编译工具安装
安装GCC9.3.0
#gcc如果离线安装,wget可以不用装。 yum install -y bzip2 wget gcc gcc-c++ glibc-headers #把离线下载的gmp-6.1.0.tar.bz2、isl-0.18.tar.bz2、mpc-1.0.3.tar.gz、mpfr-3.1.4.tar.bz2放到解压出来的gcc-9.3.0目录下,然后进入gcc-9.3.0目录,执行如下命令: ./contrib/download_prerequisites mkdir build && cd build ../configure --prefix=/usr/local/gcc-9.3.0 --enable-checking=release --enable-languages=c,c++ --disable-multilib export THREADS=$(grep -c ^processor /proc/cpuinfo) make -j $(nproc) make install echo "export LD_LIBRARY_PATH=/usr/local/lib:/usr/lib:/usr/local/lib64:/usr/lib64">>/etc/profile echo "export CC=/usr/local/gcc-9.3.0/bin/aarch64-unknown-linux-gnu-gcc">>/etc/profile echo "export CXX=/usr/local/gcc-9.3.0/bin/aarch64-unknown-linux-gnu-g++">>/etc/profile echo "export PATH=/usr/local/gcc-9.3.0/bin:${PATH}">>/etc/profile source /etc/profile # 设置头文件 ln -sv /usr/local/gcc/include/ /usr/include/gcc # 设置库文件 touch /etc/ld.so.conf.d/gcc.conf chmod 777 /etc/ld.so.conf.d/gcc.conf echo -e "/usr/local/gcc/lib64" >> /etc/ld.so.conf.d/gcc.conf # 加载动态连接库 ldconfig -v ldconfig -p | grep gcc source /etc/profile gcc -v cp /usr/local/gcc-9.3.0/lib64/libstdc++.so.6.0.28 /usr/lib64 cd /usr/lib64 rm -f libstdc++.so.6 ln -s libstdc++.so.6.0.28 libstdc++.so.6 |
cmake-3.18.4安装
yum -y install lz4-devel openssl-devel zlib-devel zstd-devel protobufdevel libicu-devel readline-devel gperf curl-devel |
#获取版本https://github.com/Kitware/CMake/archive/v3.18.4.tar.gz cd cmake-3.18.4 ./bootstrap # 编译安装 make -j 4 make install # 查看版本 cmake --version |
clang安装
tar xvf llvm-11.0.0.src.tar.xz tar xvf clang-11.0.0.src.tar.xz tar xvf clang-tools-extra-11.0.0.src.tar.xz tar xvf compiler-rt-11.0.0.src.tar.xz tar xvf libcxx-11.0.0.src.tar.xz tar xvf libcxxabi-11.0.0.src.tar.xz tar xvf lldb-11.0.0.src.tar.xz mv clang-11.0.0.src llvm-11.0.0.src/tools/clang mv clang-tools-extra-11.0.0.src llvm-11.0.0.src/tools/clang/extra mv compiler-rt-11.0.0.src llvm-11.0.0.src/projects/compiler-rt mv libcxx-11.0.0.src llvm-11.0.0.src/projects/libcxx mv libcxxabi-11.0.0.src llvm-11.0.0.src/projects/libcxxabi mv lldb-11.0.0.src llvm-11.0.0.src/tools/lldb cd llvm-11.0.0.src mkdir build && cd build cmake -G "Unix Makefiles" -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=/opt/llvm .. export THREADS=$(grep -c ^processor /proc/cpuinfo) make -j $(nproc) make install echo "export PATH=$PATH:/opt/llvm/bin" >>/etc/profile source /etc/profile |
git安装
yum install -y curl-devel yum install -y git |
ninja安装
yum -y install git automake gcc+ gcc-c++ libtool #下载https://down.24kplus.com/linux/re2c-1.1.1.tar.gz tar -zxvf cd re2c.tar.gz cd re2c mkdir -p m4 ./autogen.sh && ./configure --prefix=/usr && make make install #检查 re2c -v #下载https://github.com/ninja-build/ninja unzip ninja-1.8.2.zip cd ninja-1.8.2/ ./configure.py --bootstrap # ninja比较精简,只需要一个可执行文件即可,现在可以做软链或者复制到/usr/bin下面就可以直接调用了 cp ninja /usr/bin/ ninja --version |
编译
source /etc/profile export CC=clang export CXX=clang++ #进入解压出来或者git拉下来的代码目录后,执行如下命令: mkdir build && cd build cmake .. -DCMAKE_INSTALL_PREFIX=/opt/clickhouse ninja #clickhouse下载下来的代码应该是通过ninja编译过,所有默认还是使用ninja编译,而无法用 make和make install # make -j $(nproc) # make install #如果cmake时指定了-DCMAKE_INSTALL_PREFIX参数,make install会将可以执行文件即各类其他依赖文件都放到/opt/clickhouse下; #在编译及安装完成后,会缺少一些文件,并不是编译错误造成的,这些文件需要手动添加 #手动添加之后,可以将/opt/clickhouse目录压缩,以备在其他地方运行 mkdir -p /opt/ClickHouse-21.3.12.2-lts-aarch64/bin mkdir -p /opt/ClickHouse-21.3.12.2-lts-aarch64/config/ mkdir -p /opt/ClickHouse-21.3.12.2-lts-aarch64/lib cp programs/clickhouse /opt/ClickHouse-21.3.12.2-lts-aarch64/bin/ cp programs/clickhouse-odbc-bridge /opt/ClickHouse-21.3.12.2-lts-aarch64/bin/ cp ./utils/report/clickhouse-report /opt/ClickHouse-21.3.12.2-lts-aarch64/bin/ cp ./tests/clickhouse-test /opt/ClickHouse-21.3.12.2-lts-aarch64/bin/ cp ./tests/clickhouse-test-server /opt/ClickHouse-21.3.12.2-lts-aarch64/bin/ cp ./build_kylin0625/utils/zookeeper-cli/clickhouse-zookeeper-cli /opt/ClickHouse-21.3.12.2-lts-aarch64/bin/ cp ./build_kylin0625/utils/config-processor/config-processor /opt/ClickHouse-21.3.12.2-lts-aarch64/bin/ cp ./build_kylin0625/utils/corrector_utf8/corrector_utf8 /opt/ClickHouse-21.3.12.2-lts-aarch64/bin/ cp ../programs/server/config.xml /opt/ClickHouse-21.3.12.2-lts-aarch64/config/ cp ../programs/server/users.xml /opt/ClickHouse-21.3.12.2-lts-aarch64/config/ cp ../tests/config/dhparam.pem /opt/ClickHouse-21.3.12.2-lts-aarch64/config/ cp ../tests/config/server.key /opt/ClickHouse-21.3.12.2-lts-aarch64/config/ cp ../tests/config/server.crt /opt/ClickHouse-21.3.12.2-lts-aarch64/config/ cp ./contrib/libcxx-cmake/libcxx.a /opt/ClickHouse-21.3.12.2-lts-aarch64/lib/ cp ./contrib/libcxxabi-cmake/libcxxabi.a /opt/ClickHouse-21.3.12.2-lts-aarch64/lib/ cp ./base/glibc-compatibility/libglibc-compatibility.a /opt/ClickHouse-21.3.12.2-lts-aarch64/lib/ cd /opt/ClickHouse-21.3.12.2-lts-aarch64/bin ln -s clickhouse clickhouse-client ln -s clickhouse clickhouse-compressor ln -s clickhouse clickhouse-copier ln -s clickhouse clickhouse-extract-from-config ln -s clickhouse clickhouse-format ln -s clickhouse clickhouse-git-import ln -s clickhouse clickhouse-local ln -s clickhouse clickhouse-obfuscator ln -s clickhouse clickhouse-server cd /opt tar -zcvf ClickHouse-21.3.12.2-lts-aarch64_kylinCompile.tar.gz ClickHouse-21.3.12.2-lts-aarch64/ |
或:将LIB和工具分开编译
这一步跟上面“4.编译”都是进行编译,只是编译的参数不同,可根据自己的需要选择4或5执行。
source /etc/profile export CC=clang export CXX=clang++ #进入解压出来或者git拉下来的代码目录后,执行如下命令: mkdir build && cd build cmake .. -DUSE_STATIC_LIBRARIES=0 -DSPLIT_SHARED_LIBRARIES=1 -DCLICKHOUSE_SPLIT_BINARY=1 -DCMAKE_INSTALL_PREFIX=/opt/clickhouse #如果只将工具分开,lib都静态链接,可以执行如下: cmake .. -DCLICKHOUSE_SPLIT_BINARY=1 -DCMAKE_INSTALL_PREFIX=/opt/clickhouse make -j $(nproc) make install mkdir -p /opt/clickhouse/config/ cp ../programs/server/config.xml /opt/clickhouse/config/ cp ../programs/server/users.xml /opt/clickhouse/config/ cp ../tests/config/dhparam.pem /opt/clickhouse/config/ cp ../tests/config/server.key /opt/clickhouse/config/ cp ../tests/config/server.crt /opt/clickhouse/config/ /usr/bin/cp -f ../base/harmful/libharmful.so /opt/clickhouse/lib/ /usr/bin/cp -f ../base/common/libcommon.so /opt/clickhouse/lib/ /usr/bin/cp -f ../base/daemon/libdaemon.so /opt/clickhouse/lib/ /usr/bin/cp -f ../base/loggers/libloggers.so /opt/clickhouse/lib/ /usr/bin/cp -f ../base/widechar_width/libwidechar_width.so /opt/clickhouse/lib/ /usr/bin/cp -f ../base/readpassphrase/libreadpassphrase.so /opt/clickhouse/lib/ /usr/bin/cp -f ../base/mysqlxx/libmysqlxx.so /opt/clickhouse/lib/ /usr/bin/cp -f ../contrib/libunwind-cmake/libunwind.so /opt/clickhouse/lib/ /usr/bin/cp -f ../contrib/libcxxabi-cmake/libcxxabi.so /opt/clickhouse/lib/ /usr/bin/cp -f ../contrib/libcxx-cmake/libcxx.so /opt/clickhouse/lib/ /usr/bin/cp -f ../contrib/capnproto-cmake/libkj.so /opt/clickhouse/lib/ /usr/bin/cp -f ../contrib/capnproto-cmake/libcapnp.so /opt/clickhouse/lib/ /usr/bin/cp -f ../contrib/capnproto-cmake/libcapnpc.so /opt/clickhouse/lib/ /usr/bin/cp -f ../contrib/antlr4-runtime-cmake/libantlr4-runtime.so /opt/clickhouse/lib/ /usr/bin/cp -f ../contrib/boost-cmake/lib_boost_system.so /opt/clickhouse/lib/ /usr/bin/cp -f ../contrib/boost-cmake/lib_boost_context.so /opt/clickhouse/lib/ /usr/bin/cp -f ../contrib/boost-cmake/lib_boost_filesystem.so /opt/clickhouse/lib/ /usr/bin/cp -f ../contrib/boost-cmake/lib_boost_program_options.so /opt/clickhouse/lib/ /usr/bin/cp -f ../contrib/boost-cmake/lib_boost_iostreams.so /opt/clickhouse/lib/ /usr/bin/cp -f ../contrib/boost-cmake/lib_boost_coroutine.so /opt/clickhouse/lib/ /usr/bin/cp -f ../contrib/boost-cmake/lib_boost_regex.so /opt/clickhouse/lib/ /usr/bin/cp -f ../contrib/cctz-cmake/libcctz.so /opt/clickhouse/lib/ /usr/bin/cp -f ../contrib/consistent-hashing/libconsistent-hashing.so /opt/clickhouse/lib/ /usr/bin/cp -f ../contrib/dragonbox-cmake/libdragonbox_to_chars.so /opt/clickhouse/lib/ /usr/bin/cp -f ../contrib/jemalloc-cmake/libjemalloc.so /opt/clickhouse/lib/ /usr/bin/cp -f ../contrib/libmetrohash/libmetrohash.so /opt/clickhouse/lib/ /usr/bin/cp -f ../contrib/lz4-cmake/liblz4.so /opt/clickhouse/lib/ /usr/bin/cp -f ../contrib/murmurhash/libmurmurhash.so /opt/clickhouse/lib/ /usr/bin/cp -f ../contrib/replxx-cmake/libreplxx.so /opt/clickhouse/lib/ /usr/bin/cp -f ../contrib/unixodbc-cmake/libltdl.so /opt/clickhouse/lib/ /usr/bin/cp -f ../contrib/unixodbc-cmake/libunixodbc.so /opt/clickhouse/lib/ /usr/bin/cp -f ../contrib/xz/liblzma.so /opt/clickhouse/lib/ /usr/bin/cp -f ../contrib/poco-cmake/Crypto/lib_poco_crypto.so /opt/clickhouse/lib/ /usr/bin/cp -f ../contrib/poco-cmake/Data/ODBC/lib_poco_data_odbc.so /opt/clickhouse/lib/ /usr/bin/cp -f ../contrib/poco-cmake/Data/lib_poco_data.so /opt/clickhouse/lib/ /usr/bin/cp -f ../contrib/poco-cmake/Foundation/lib_poco_foundation_pcre.so /opt/clickhouse/lib/ /usr/bin/cp -f ../contrib/poco-cmake/Foundation/lib_poco_foundation.so /opt/clickhouse/lib/ /usr/bin/cp -f ../contrib/poco-cmake/JSON/lib_poco_json_pdjson.so /opt/clickhouse/lib/ /usr/bin/cp -f ../contrib/poco-cmake/JSON/lib_poco_json.so /opt/clickhouse/lib/ /usr/bin/cp -f ../contrib/poco-cmake/MongoDB/lib_poco_mongodb.so /opt/clickhouse/lib/ /usr/bin/cp -f ../contrib/poco-cmake/Net/SSL/lib_poco_net_ssl.so /opt/clickhouse/lib/ /usr/bin/cp -f ../contrib/poco-cmake/Net/lib_poco_net.so /opt/clickhouse/lib/ /usr/bin/cp -f ../contrib/poco-cmake/Redis/lib_poco_redis.so /opt/clickhouse/lib/ /usr/bin/cp -f ../contrib/poco-cmake/Util/lib_poco_util.so /opt/clickhouse/lib/ /usr/bin/cp -f ../contrib/poco-cmake/XML/lib_poco_xml_expat.so /opt/clickhouse/lib/ /usr/bin/cp -f ../contrib/poco-cmake/XML/lib_poco_xml.so /opt/clickhouse/lib/ /usr/bin/cp -f ../contrib/croaring-cmake/libroaring.so /opt/clickhouse/lib/ /usr/bin/cp -f ../contrib/zstd-cmake/libzstd.so /opt/clickhouse/lib/ /usr/bin/cp -f ../contrib/re2/libre2.so /opt/clickhouse/lib/ /usr/bin/cp -f ../contrib/re2_st/libre2_st.so /opt/clickhouse/lib/ /usr/bin/cp -f ../contrib/double-conversion-cmake/libdouble-conversion.so /opt/clickhouse/lib/ /usr/bin/cp -f ../contrib/cityhash102/libcityhash.so /opt/clickhouse/lib/ /usr/bin/cp -f ../contrib/libfarmhash/libfarmhash.so /opt/clickhouse/lib/ /usr/bin/cp -f ../contrib/zlib-ng/libz.so /opt/clickhouse/lib/ /usr/bin/cp -f ../contrib/h3-cmake/libh3.so /opt/clickhouse/lib/ /usr/bin/cp -f ../contrib/boringssl-cmake/libcrypto.so /opt/clickhouse/lib/ /usr/bin/cp -f ../contrib/boringssl-cmake/libssl.so /opt/clickhouse/lib/ |