Clickhouse ODBC在Centos6下的编译方法

浏览: 1902

Clickhouse ODBC github地址:

https://github.com/ClickHouse/clickhouse-odbc

由于需要在CentOS 6下使用Clickhouse ODBC,但是提供的编译版本是在CentOS 7下编译的,就需要自己编译了。

0.检查

先在CentOS 6下检查下,报缺乏依赖包

ldd libclickhouseodbc.so
./libclickhouseodbc.so: /lib64/libc.so.6: version `GLIBC_2.14' not found (required by ./libclickhouseodbc.so)
linux-vdso.so.1 =>  (0x00007ffff31ff000)
libpthread.so.0 => /lib64/libpthread.so.0 (0x00007fe86034b000)
libdl.so.2 => /lib64/libdl.so.2 (0x00007fe860146000)
librt.so.1 => /lib64/librt.so.1 (0x00007fe85ff3e000)
libodbc.so.2 => not found
libodbcinst.so.2 => not found
libltdl.so.7 => /usr/lib64/libltdl.so.7 (0x00007fe85fd34000)
libm.so.6 => /lib64/libm.so.6 (0x00007fe85fab0000)
libc.so.6 => /lib64/libc.so.6 (0x00007fe85f71b000)
/lib64/ld-linux-x86-64.so.2 (0x00000031bfe00000)

强制安装了glibc 2.17也没解决问题。

只能安装说明文档自己编译了,

1.安装依赖环境

sudo yum install openssl unixODBC
sudo yum install openssl libiodbc

2.准备编译环境

系统要求:

CMake 3.13.5 and later
C++17 and C11 capable compiler toolchain:
Clang 4 and later
GCC 7 and later   
Xcode 10 and later
Microsoft Visual Studio 2017 and later
------------
另外实际上还需要python 2.7次下pyodbc
和glibc 2.14以上

Cmake

下载Binary distributions:(https://cmake.org/download/)
我用了这个
https://github.com/Kitware/CMake/releases/download/v3.17.0/cmake-3.17.0-Linux-x86_64.sh
注意运行时候设置路径
export PATH=$PATH:/yourpath/cmake-3.17.0-Linux-x86_64/bin
升级到gcc 7.3:
yum -y install centos-release-scl
yum -y install devtoolset-7-gcc devtoolset-7-gcc-c++ devtoolset-7-binutils
注意运行时候设置
scl enable devtoolset-7 bash
python 2.7次下pyodbc
yum install unixODBC-devel

python下2.7的环境

pip install pyodbc
glibc 2.17
sudo yum install zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel gcc make
# update glibc to 2.17 for CentOS 6
cd /yourpath/glib217
wget http://copr-be.cloud.fedoraproject.org/results/mosquito/myrepo-el6/epel-6-x86_64/glibc-2.17-55.fc20/glibc-utils-2.17-55.el6.x86_64.rpm &
wget http://copr-be.cloud.fedoraproject.org/results/mosquito/myrepo-el6/epel-6-x86_64/glibc-2.17-55.fc20/glibc-static-2.17-55.el6.x86_64.rpm &
wget http://copr-be.cloud.fedoraproject.org/results/mosquito/myrepo-el6/epel-6-x86_64/glibc-2.17-55.fc20/glibc-2.17-55.el6.x86_64.rpm &
wget http://copr-be.cloud.fedoraproject.org/results/mosquito/myrepo-el6/epel-6-x86_64/glibc-2.17-55.fc20/glibc-common-2.17-55.el6.x86_64.rpm &
wget http://copr-be.cloud.fedoraproject.org/results/mosquito/myrepo-el6/epel-6-x86_64/glibc-2.17-55.fc20/glibc-devel-2.17-55.el6.x86_64.rpm &
wget http://copr-be.cloud.fedoraproject.org/results/mosquito/myrepo-el6/epel-6-x86_64/glibc-2.17-55.fc20/glibc-headers-2.17-55.el6.x86_64.rpm &
wget http://copr-be.cloud.fedoraproject.org/results/mosquito/myrepo-el6/epel-6-x86_64/glibc-2.17-55.fc20/nscd-2.17-55.el6.x86_64.rpm &
sudo rpm -e --nodeps --justdb glibc-2.*.i686 --allmatches
sudo rpm -Uvh *-2.17-55.el6.x86_64.rpm

3.安装

scl enable devtoolset-7 bash
export PATH=$PATH:/yourpath/cmake-3.17.0-Linux-x86_64/bin
pyenv activate env2711
cd /yourpath/clickhouse-odbc-master
mkdir build
cd build
cmake -DCMAKE_BUILD_TYPE=RelWithDebInfo ..
cmake --build . --config RelWithDebInfo
cmake --build . --config RelWithDebInfo --target package

4.测试

$HOME/.odbc.ini
[ODBC]
Trace=0
UseCursorLib=0
IANAAppCodePage=4
[ODBC Data Sources]
CLICKHOUSE=libclickhouseodbc.so
[CLICKHOUSE]
Driver=/yourpath/libclickhouseodbcw.so
Host=
Port=8123
Username=
Password=
Database=

isql CLICKHOUSE测试就可以了

5.其他注意事项

注意事项1.

如果不安装glibc 2.17

../../lib/libPocoFoundation.a(Mutex.cpp.o): In function `Poco::MutexImpl::tryLockImpl(long)':
/odbctest/clickhouse-odbc-master/contrib/poco/Foundation/src/Mutex_POSIX.cpp:109: undefined reference to `clock_gettime'
collect2: error: ld returned 1 exit status
gmake[2]: *** [driver/test/clickhouse-odbc-load-ut] Error 1
gmake[1]: *** [driver/test/CMakeFiles/clickhouse-odbc-load-ut.dir/all] Error 2
gmake: *** [all] Error 2

注意事项2.

需要注意的是scl命令启用只是临时的,退出shell或重启就会恢复原系统gcc版本。

如果要长期使用gcc 7.3的话:

echo "source /opt/rh/devtoolset-7/enable" >>/etc/profile


centos 6的odbc编译版本需要的可以联系我,这个可能太大了,传不上来。

推荐 0
本文由 seng 创作,采用 知识共享署名-相同方式共享 3.0 中国大陆许可协议 进行许可。
转载、引用前需联系作者,并署名作者且注明文章出处。
本站文章版权归原作者及原出处所有 。内容为作者个人观点, 并不代表本站赞同其观点和对其真实性负责。本站是一个个人学习交流的平台,并不用于任何商业目的,如果有任何问题,请及时联系我们,我们将根据著作权人的要求,立即更正或者删除有关内容。本站拥有对此声明的最终解释权。

0 个评论

要回复文章请先登录注册