Ubuntu16.04下MonoDevelop运行SQL示例遇libodbc.so缺失异常求助
解决Ubuntu 16.04 LTS + MonoDevelop下的libodbc.so找不到问题
我之前在Ubuntu 16.04上用Mono处理ODBC数据库连接时,也碰到过完全一样的System.DllNotFoundException: libodbc.so错误!试了软链接和重装unixODBC都没用,后来才发现是架构匹配和库路径的问题,分享几个亲测有效的解决步骤:
第一步:确认系统与Mono的架构匹配
首先搞清楚你的系统是32位还是64位,以及Mono的运行架构:- 终端运行
uname -m,输出x86_64是64位系统,i686是32位 - 再运行
mono --version,看输出里的Architecture字段,比如amd64或x86
如果系统是64位但Mono是32位,那你需要安装32位的ODBC库,否则会出现找不到的情况。
- 终端运行
第二步:完整安装unixODBC依赖包
不要只装基础的unixODBC,把开发包和对应架构的库都装上:- 64位系统直接执行:
sudo apt-get update sudo apt-get install unixodbc unixodbc-dev - 如果是64位系统用32位Mono,需要额外安装32位库:
sudo apt-get install libodbc1:i386 unixodbc:i386 unixodbc-dev:i386
- 64位系统直接执行:
第三步:创建正确的软链接
很多时候问题出在Mono找库的路径不对,先找到系统里实际的libodbc文件位置:find /usr -name libodbc.so*通常64位系统下路径是
/usr/lib/x86_64-linux-gnu/libodbc.so.2(这是实际的库文件,带版本号),而Mono会去/usr/lib/下找libodbc.so,所以创建软链接:sudo ln -s /usr/lib/x86_64-linux-gnu/libodbc.so.2 /usr/lib/libodbc.so如果是32位系统,实际路径可能是
/usr/lib/i386-linux-gnu/libodbc.so.2,对应链接到/usr/lib/libodbc.so即可。第四步:配置库加载路径
有时候Mono还是找不到库,需要手动指定LD_LIBRARY_PATH:
在终端执行:export LD_LIBRARY_PATH=/usr/lib/x86_64-linux-gnu:$LD_LIBRARY_PATH如果你想永久生效,可以把这句话添加到
~/.bashrc文件末尾,然后运行source ~/.bashrc刷新配置。
做完这些步骤后,重启MonoDevelop再运行你的C#程序,应该就能解决这个错误了!
内容的提问来源于stack exchange,提问作者Hugh Connell
相关产品推荐
相关产品推荐

