什么是Pyodbc未能找到的“odbc”库?

时间:2017-09-05 18:56:49

标签: macos pyodbc unixodbc

我已经在Mac OS X 10.12.6(Sierra)上成功安装了unixODBC 2.3.4但是当我尝试运行pip install pyodbc时遇到以下错误:

ld: library not found for -lodbc

我认为它正在寻找的是与unixODBC一起安装的libodbc.la:

test -z "/usr/local/lib" || .././install-sh -c -d "/usr/local/lib"
/bin/sh ../libtool   --mode=install /usr/bin/install -c   libodbc.la '/usr/local/lib'

这不是Pyodbc正在寻找的吗?如何让它成功找到并使用它?

1 个答案:

答案 0 :(得分:2)

我已经下载了Pyodbc source(版本4.0.17)的副本,并通过检查setup.py来解决这个问题。它确实在寻找unixODBC:

# The latest versions of OS X no longer ship with iodbc.  Assume
# unixODBC for now.
settings['libraries'].append('odbc')

这会导致使用ld调用-lodbc/lib/usr/libodbc.dylib查找/lib/local/usr。不幸的是,自El Capitan以来,正常安装进入setup.py

我要解决此问题的方法是在sys.platform == 'darwin':部分的# unixODBC make/install places libodbc.dylib in /usr/local/lib/ by default # (also OS/X since El Capitan prevents /usr/lib from being accessed ) settings['library_dirs'] = [ '/usr/local/lib' ] 下添加以下行:

$ sudo pip install /path/to/pyodbc-4.0.17/

然后我可以使用PIP从我的本地系统安装它,如下所示:

   public string SendAllticketDetailsToService(AutoProvisionWebAPIClient.AutoProvisionTicketsResponse vvv)
    {                         
        // bool result = false;
        string xmlStringResult;
        xmlStringResult = ""; 
        try
        {        
            AutoProvisionController.SRMUserRegServiceReference.AutoProvisionTicketsResponse APTR = new AutoProvisionController.SRMUserRegServiceReference.AutoProvisionTicketsResponse();

我会努力为Pyodbc制作一个补丁,但同时也让我接受了。