Проблема с драйвером MySQL для unixODBC на Debian Lenny - PullRequest
0 голосов
/ 23 июля 2010

В OpenSuse 11.2 я успешно скомпилировал, связал и запустил следующий код, который устанавливает источник данных для базы данных MySQL с unixODBC:

#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

Хотя я правильно установил unixODBC и связанный драйвер MySQL (myodbc) на моем хосте(Debian Lenny) самым простым способом (т.е. через 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 голосов
/ 28 февраля 2011

Опция

-L/usr/lib/odbc

сообщает компилятору, где найти библиотеку для компоновки.

Но система не знает, где найти библиотеку при запуске исполняемого файла.

Вам нужно либо статически связать с libmyodbc, либо сообщить системе, где найти библиотеку.

Первое можно сделать, изменив

-lmyodbc

до

-static -lmyodbc

Второе можно сделать, отредактировав /etc/ld.so.conf (или добавив в /etc/ld.so.conf.d) и повторно запустив ldconfig или установив переменную среды LD_LIBRARY_PATH для включения / usr / Библиотека / ODBC

...