Microsoft SQL Linux Ubuntu 14.04 上的服务器 ODBC 驱动程序:错误的库版本
Microsoft SQL Server ODBC driver on Linux Ubuntu 14.04: wrong library version
我无法通过 Linux 的 Microsoft ODBC 驱动程序连接到 MS-SQL 服务器。以下错误消息:
isql mydsn myuser mypw -v
[01000][unixODBC][Driver Manager]Can't open lib '/opt/microsoft/msodbcsql/lib64/libmsodbcsql-13.0.so.0.0' : file not found
不过上面的消息并没有说明全部情况。让我们看看 ldd 能告诉我们什么:
ldd /opt/microsoft/msodbcsql/lib64/libmsodbcsql-13.0.so.0.0
/opt/microsoft/msodbcsql/lib64/libmsodbcsql-13.0.so.0.0: /usr/lib/x86_64-linux-gnu/libstdc++.so.6: version `GLIBCXX_3.4.20' not found (required by /opt/microsoft/msodbcsql/lib64/libmsodbcsql-13.0.so.0.0)
/opt/microsoft/msodbcsql/lib64/libmsodbcsql-13.0.so.0.0: /usr/lib/x86_64-linux-gnu/libstdc++.so.6: version `CXXABI_1.3.8' not found (required by /opt/microsoft/msodbcsql/lib64/libmsodbcsql-13.0.so.0.0)
[...]
(我将其安装在 Docker 图像上,以便 Caravel can connect to MS-SQL databases - see Dockerfile, Docker image 适用于 Caravel)
下面的命令将安装 libstdc++.so.6 的正确版本(基于 this answer):
echo 'deb http://ppa.launchpad.net/ubuntu-toolchain-r/test/ubuntu trusty main' > \
/etc/apt/sources.list.d/ubuntu-toolchain-r-test-trusty.list
apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 1E9377A2BA9EF27F
apt-get update -y
apt-get upgrade -y
apt-get dist-upgrade -y
因此,如果您在 ubuntu 14.04 上从头开始,这些命令将安装 UnixODBC、Microsoft SQL Linux 的服务器 ODBC 驱动程序和所有必需的依赖项:
echo 'deb http://ppa.launchpad.net/ubuntu-toolchain-r/test/ubuntu trusty main' > \
/etc/apt/sources.list.d/ubuntu-toolchain-r-test-trusty.list && \
apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 1E9377A2BA9EF27F && \
apt-get update -y && apt-get upgrade -y && apt-get dist-upgrade -y && \
apt-get install -y build-essential libssl-dev libffi-dev \
curl ca-certificates libgss3 && \
locale-gen en_US.utf8 && dpkg-reconfigure locales
mkdir -p /tmp/ms-sql && (cd /tmp/ms-sql && curl 'https://download.microsoft.com/download/2/E/5/2E58F097-805C-4AB8-9FC6-71288AB4409D/msodbcsql-13.0.0.0.tar.gz' \
-H 'Referer: https://www.microsoft.com/en-us/download/confirmation.aspx?id=50419' --compressed | \
tar --strip-components=1 -xzv && \
sed -ri -e 's/wget/curl/g' -e's/(\s*)$\(curl[^)]+\)/curl -fsSL "$dm_url" -o "$dm_package_path"/' \
-e '/make install/,$ d' build_dm.sh && echo '(cd $tmp/$dm_dir && make install)' >> build_dm.sh && \
echo YES | ./build_dm.sh --accept-warning --libdir=/usr/lib/x86_64-linux-gnu && \
./install.sh install --accept-license) && \
sed -rie 's/\[.+SQL Server\]/[MS-SQL]/' /etc/odbcinst.ini
我无法通过 Linux 的 Microsoft ODBC 驱动程序连接到 MS-SQL 服务器。以下错误消息:
isql mydsn myuser mypw -v
[01000][unixODBC][Driver Manager]Can't open lib '/opt/microsoft/msodbcsql/lib64/libmsodbcsql-13.0.so.0.0' : file not found
不过上面的消息并没有说明全部情况。让我们看看 ldd 能告诉我们什么:
ldd /opt/microsoft/msodbcsql/lib64/libmsodbcsql-13.0.so.0.0
/opt/microsoft/msodbcsql/lib64/libmsodbcsql-13.0.so.0.0: /usr/lib/x86_64-linux-gnu/libstdc++.so.6: version `GLIBCXX_3.4.20' not found (required by /opt/microsoft/msodbcsql/lib64/libmsodbcsql-13.0.so.0.0)
/opt/microsoft/msodbcsql/lib64/libmsodbcsql-13.0.so.0.0: /usr/lib/x86_64-linux-gnu/libstdc++.so.6: version `CXXABI_1.3.8' not found (required by /opt/microsoft/msodbcsql/lib64/libmsodbcsql-13.0.so.0.0)
[...]
(我将其安装在 Docker 图像上,以便 Caravel can connect to MS-SQL databases - see Dockerfile, Docker image 适用于 Caravel)
下面的命令将安装 libstdc++.so.6 的正确版本(基于 this answer):
echo 'deb http://ppa.launchpad.net/ubuntu-toolchain-r/test/ubuntu trusty main' > \
/etc/apt/sources.list.d/ubuntu-toolchain-r-test-trusty.list
apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 1E9377A2BA9EF27F
apt-get update -y
apt-get upgrade -y
apt-get dist-upgrade -y
因此,如果您在 ubuntu 14.04 上从头开始,这些命令将安装 UnixODBC、Microsoft SQL Linux 的服务器 ODBC 驱动程序和所有必需的依赖项:
echo 'deb http://ppa.launchpad.net/ubuntu-toolchain-r/test/ubuntu trusty main' > \
/etc/apt/sources.list.d/ubuntu-toolchain-r-test-trusty.list && \
apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 1E9377A2BA9EF27F && \
apt-get update -y && apt-get upgrade -y && apt-get dist-upgrade -y && \
apt-get install -y build-essential libssl-dev libffi-dev \
curl ca-certificates libgss3 && \
locale-gen en_US.utf8 && dpkg-reconfigure locales
mkdir -p /tmp/ms-sql && (cd /tmp/ms-sql && curl 'https://download.microsoft.com/download/2/E/5/2E58F097-805C-4AB8-9FC6-71288AB4409D/msodbcsql-13.0.0.0.tar.gz' \
-H 'Referer: https://www.microsoft.com/en-us/download/confirmation.aspx?id=50419' --compressed | \
tar --strip-components=1 -xzv && \
sed -ri -e 's/wget/curl/g' -e's/(\s*)$\(curl[^)]+\)/curl -fsSL "$dm_url" -o "$dm_package_path"/' \
-e '/make install/,$ d' build_dm.sh && echo '(cd $tmp/$dm_dir && make install)' >> build_dm.sh && \
echo YES | ./build_dm.sh --accept-warning --libdir=/usr/lib/x86_64-linux-gnu && \
./install.sh install --accept-license) && \
sed -rie 's/\[.+SQL Server\]/[MS-SQL]/' /etc/odbcinst.ini