2010-07-23 81 views
0

在openSUSE 11.2,我成功编译,链接和运行下面的代码安装了一个数据源,一个MySQL数据库的unixODBC:问题与MySQL驱动程序的unixODBC。在Debian Lenny

#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主确认链接错误:

libmyodbc3_r-3.51.15.so => not found 

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

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

General installer error 

因此,我觉得文件libmyodbc3_r-3.51.15.so是真的缺少。

注:Debian的莱尼,unixODBC的版本是2.2.11,而MySQL的版本是5.0.51a

有谁碰到了这样的情况?任何帮助,将不胜感激。

回答

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

+0

第三个选项是对二进制文件中的/ usr/lib/odbc路径进行硬编码,添加标志'-Wl,-rpath,/ usr/lib/odbc' – nos 2011-02-28 20:49:23