0

在 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

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

4

1 回答 1

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 来完成

于 2011-02-28T20:16:12.397 回答