Debian Lenny上unixODBC的MySQL驱动程序问题

时间:2010-07-23 07:23:49

标签: mysql linux debian unixodbc

在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

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

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

General installer error

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

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

有没有人遇到过这样的情况?任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:0)

选项

-L/usr/lib/odbc

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

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

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

第一个可以通过改变

来完成
-lmyodbc

-static -lmyodbc

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