坑挺深搞了1天多.......记录一下
安装完unixodbc和freetds后,测试与SQL server连接,连接成功,测试qt与SQL server连接,连接失败。
在编译qt的安装目录下找到odbc文件后,进行编译,生成了libqsqlodbc.so文件,将其移动到
/opt/Qt5.14.2/5.14.2/gcc_64/plugins/sqldrivers下,测试连接,以失败告终。
于是检查libqsqlodbc.so文件的依赖
sudo ldd libqsqlodbc.so
依赖关系如下
linux-vdso.so.1 (0x00007ffe829cd000)
libodbc.so.2 => /usr/local/lib/libodbc.so.2 (0x00007f90cc7bc000)
libQt5Sql.so.5 => /opt/Qt5.14.2/5.14.2/gcc_64/lib/libQt5Sql.so.5 (0x00007f90cc573000)
libQt5Core.so.5 => /opt/Qt5.14.2/5.14.2/gcc_64/lib/libQt5Core.so.5 (0x00007f90cbd98000)
libstdc++.so.6 => /lib/x86_64-linux-gnu/libstdc++.so.6 (0x00007f90cbba1000)
libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007f90cba52000)
libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f90cb85e000)
libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007f90cb858000)
libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007f90cb835000)
libgcc_s.so.1 => /lib/x86_64-linux-gnu/libgcc_s.so.1 (0x00007f90cb81a000)
libz.so.1 => /lib/x86_64-linux-gnu/libz.so.1 (0x00007f90cb7fe000)
libicui18n.so.56 => /opt/Qt5.14.2/5.14.2/gcc_64/lib/libicui18n.so.56 (0x00007f90cb365000)
libicuuc.so.56 => /opt/Qt5.14.2/5.14.2/gcc_64/lib/libicuuc.so.56 (0x00007f90cafab000)
libicudata.so.56 => /opt/Qt5.14.2/5.14.2/gcc_64/lib/libicudata.so.56 (0x00007f90c95c8000)
libgthread-2.0.so.0 => /lib/x86_64-linux-gnu/libgthread-2.0.so.0 (0x00007f90c95c3000)
libglib-2.0.so.0 => /lib/x86_64-linux-gnu/libglib-2.0.so.0 (0x00007f90c949a000)
/lib64/ld-linux-x86-64.so.2 (0x00007f90cc855000)
libpcre.so.3 => /lib/x86_64-linux-gnu/libpcre.so.3 (0x00007f90c9427000)
发现libodbc.so.2 => /usr/local/lib/libodbc.so.2 (0x00007f90cc7bc000)的路径没有指向unixODBC lib下的libodbc.so.2
解决方法
更改libodbc.so.2依赖的指向路径,刷新共享库缓存
cd /etc/ld.so.conf.d
sudo gedit libc.conf
打开libc.conf文件后发现路径是/usr/local/lib
将其屏蔽增加新路径/usr/local/unixODBC/lib
刷新共享库缓存
sudo ldconfig (一定要执行这一步)
删除原来的libqsqlodbc.so文件,重新生成新的.so文件,
再次测试连接成功