0

OpenSuse 11.2 で、unixODBC を使用して MySQL データベースのデータ ソースをインストールする次のコードを正常にコンパイル、リンク、および実行しました。

#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

ホスト (Debian Lenny) に unixODBC と関連する MySQL ドライバー (myodbc) を最も簡単な方法 (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 です。

誰もそのような状況に遭遇したことがありますか? どんな助けでも大歓迎です。

4

1 に答える 1

0

オプション

-L/usr/lib/odbc

リンクするライブラリの場所をコンパイラに指示します。

しかし、システムは、実行可能ファイルを実行するときにライブラリを見つける場所を知りません。

libmyodbc に対して静的にリンクするか、ライブラリの場所をシステムに伝える必要があります。

最初は変更することで実行できます

-lmyodbc

-static -lmyodbc

2 つ目は、/etc/ld.so.conf を編集 (または /etc/ld.so.conf.d に追加) して ldconfig を再実行するか、LD_LIBRARY_PATH 環境変数に /usr/lib/odbc を含めるように設定することで実行できます。

于 2011-02-28T20:16:12.397 に答える