2010-07-23 6 views
0

sur openSUSE 11.2, je compilé avec succès, lié, et a couru le code suivant qui installe une source de données pour une base de données MySQL avec unixODBC:problème avec le pilote MySQL pour unixODBC sur 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; 
} 

Avec le même code sur Debian Lenny, j'ai eu des problèmes. D'abord, j'ai compilé ce code de la façon suivante:

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

Ça s'est bien passé. Mais quand je tentais d'exécuter un binaire, je suis une erreur de liaison qui en fait a été confirmé en tapant ldd principale:

libmyodbc3_r-3.51.15.so => not found 

Bien que unixODBC et le pilote de MySQL associé (myodbc) sur mon hôte (Debian j'ai installé correctement Lenny) la manière la plus simple (ie via aptitude), je n'ai pas pu trouver cette bibliothèque partagée.

J'ai pensé à tort, eh bien, je vais créer un lien symbolique sur /usr/lib/odbc/libmyodbc.so. Quoi qu'il en soit maintenant mon programme renvoie le message suivant:

General installer error 

donc je me sens le fichier libmyodbc3_r-3.51.15.so est vraiment manquant.

Note: sur Debian Lenny, la version de unixODBC est 2.2.11 et la version de MySQL est 5.0.51a

Quiconque a déjà couru dans une telle situation? Toute aide serait appréciée.

Répondre

0

L'option

-L/usr/lib/odbc 

indique au compilateur où trouver la bibliothèque pour relier.

Mais le système ne sait pas où trouver la bibliothèque lorsque vous exécutez l'exécutable.

Vous devez soit établir un lien statique avec libmyodbc, soit indiquer au système où trouver la bibliothèque.

La première peut être effectuée en modifiant

-lmyodbc 

à

-static -lmyodbc 

Le second peut se faire en modifiant /etc/ld.so.conf (ou en ajoutant à/etc/ld. so.conf.d) et en relançant ldconfig ou en définissant la variable d'environnement LD_LIBRARY_PATH pour inclure/usr/lib/odbc

+0

Une troisième option consiste à coder en dur le chemin/usr/lib/odbc dans le binaire, faites-le par ajouter le drapeau '-Wl, -rpath,/usr/lib/odbc' – nos