【问题标题】:Problem with MySQL driver for unixODBC on Debian LennyDebian Lenny 上 unixODBC 的 MySQL 驱动程序问题
【发布时间】:2010-07-23 07:23:49
【问题描述】:

在 OpenSuse 11.2 上,我成功编译、链接和运行以下代码,该代码使用 unixODBC 为 MySQL 数据库安装数据源:

#include <iostream>
#include <sql.h>
#include <sqlext.h>
#include <odbcinst.h>

/* Add a data source for the following MySQL db: db=testdb, username=test, password = test. */
void inst()
{
   BOOL ret = SQLConfigDataSource(NULL, ODBC_ADD_DSN, "MySQL driver",
                                  "DSN=mysource\0UID=test\0PWD=test\0DATABASE=testdb\0\0");
   if (!ret) {
      DWORD errCode;
      char errBuf[SQL_MAX_MESSAGE_LENGTH];
      WORD msgLen;
      SQLInstallerError(1, &errCode, errBuf, SQL_MAX_MESSAGE_LENGTH, &msgLen);
      std::cerr << errBuf << std::endl;
   }
}

int main()
{
     inst();
     return 0;
}

在 Debian Lenny 上使用相同的代码,我遇到了问题。首先,我按照以下方式编译了这段代码:

c++ -o main main.cc  -lodbc -lodbcinst -L/usr/lib/odbc -lmyodbc

一切顺利。但是当我尝试运行生成的二进制文件时,我得到了一个链接器错误,实际上通过键入 ldd main 来确认:

libmyodbc3_r-3.51.15.so => not found

虽然我以最简单的方式(即通过 aptitude)在我的主机 (Debian Lenny) 上正确安装了 unixODBC 和相关的 MySQL 驱动程序 (myodbc),但我找不到这个共享库。

我错误地认为,好吧,我将在 /usr/lib/odbc/libmyodbc.so 上创建一个符号链接。无论如何,现在我的程序返回以下消息:

General installer error

所以我觉得文件 libmyodbc3_r-3.51.15.so 真的不见了。

注意:在Debian Lenny上,unixODBC的版本是2.2.11,MySQL的版本是5.0.51a

有人遇到过这种情况吗?任何帮助将不胜感激。

【问题讨论】:

    标签: mysql linux debian unixodbc


    【解决方案1】:

    选项

    -L/usr/lib/odbc
    

    告诉编译器在哪里可以找到要链接的库。

    但是当你运行可执行文件时系统不知道在哪里找到库。

    您需要静态链接到 libmyodbc,或者告诉系统在哪里可以找到该库。

    第一个可以通过改变来完成

    -lmyodbc
    

    -static -lmyodbc
    

    第二个可以通过编辑 /etc/ld.so.conf(或添加到 /etc/ld.so.conf.d)并重新运行 ldconfig 或通过将 LD_LIBRARY_PATH 环境变量设置为包含 /usr/ 来完成lib/odbc

    【讨论】:

    • 第三种选择是硬编码二进制文件中的 /usr/lib/odbc 路径,通过添加标志 -Wl,-rpath,/usr/lib/odbc
    猜你喜欢
    • 1970-01-01
    • 2010-12-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多