2010-07-23 80 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