Проблема с драйвером MySQL для unixODBC на Debian Lenny

0

В 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

Кто-нибудь когда-либо сталкивался с такой ситуацией? Любая помощь будет оценена.

Теги:
debian
unixodbc

1 ответ

0

Опция

-L/usr/lib/odbc

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

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

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

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

-lmyodbc

to

-static -lmyodbc

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

  • 0
    Третий вариант - жестко закодировать путь / usr / lib / odbc в двоичном -Wl,-rpath,/usr/lib/odbc это, добавив флаг -Wl,-rpath,/usr/lib/odbc

Ещё вопросы

Сообщество Overcoder
Наверх
Меню