8

ArchLinuxを使用していて、PHP経由でアクセスできるようにOpenEdgeプログレスドライバーをインストールしようとしています。unixodbcパッケージとドライバーをインストールしましたが、isqlまたはPHPを介して接続をテストすると、同じエラーが発生します...

# isql -3 SUBS2A
[01000][unixODBC][Driver Manager]Can't open lib '/usr/dlc/odbc/lib/pgoe1023.so' : file not found
[ISQL]ERROR: Could not SQLConnect

混乱したのは、「/ usr / dlc / odbc / lib /pgoe1023.so」が現在存在していることです。「/usr/dlc」からシンボリックリンクしたこともあります。

以下は私の.iniファイルです...

odbc.ini

[SUBS2A]
Description = ODBC Driver for Progress
Driver = /usr/dlc/odbc/lib/pgoe1023.so
FileUsage = 1

odbcinst.ini(関連性がないため、一部の資格情報を削除しました)

[ODBC-test]
Description = SUBS2A
Driver = SUBS2A
Server = 192.168.1.2
Port = 4000
APILevel=1
ConnectFunctions=YYN
CPTimeout=60
DriverODBCVer=03.60
FileUsage=0
SQLLevel=0
UsageCount=1
ArraySize=50
DefaultLongDataBuffLen=2048
DefaultIsolationLevel= READ COMMITTED
StaticCursorLongColBuffLen=4096

編集詳細情報を追加...

どちらも32ビットのように見えますが、それに関して何をしているのかわかりません。

[root@Crux etc]# file /usr/bin/isql
/usr/bin/isql: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.27, BuildID[sha1]=0xd1bc16c119                          bb5cad6fea9e2a9abc1d06794a2775, stripped
[root@Crux etc]# file /usr/dlc/odbc/lib/pgoe1023.so
/usr/dlc/odbc/lib/pgoe1023.so: ELF 32-bit LSB shared object, Intel 80386, version 1 (SYSV), dynamically linked, not stripped

いくつかの依存関係が欠落しているようです...

[root@Crux lib]# ldd pgoe1023.so
        linux-gate.so.1 =>  (0xb77c2000)
        libpthread.so.0 => /lib/libpthread.so.0 (0xb7499000)
        librt.so.1 => /lib/librt.so.1 (0xb7490000)
        libpgicu23.so => not found
        libdl.so.2 => /lib/libdl.so.2 (0xb748b000)
        libstdc++-libc6.2-2.so.3 => not found
        libm.so.6 => /lib/libm.so.6 (0xb745e000)
        libc.so.6 => /lib/libc.so.6 (0xb72bc000)
        /lib/ld-linux.so.2 (0xb77c3000)

アップデート

「libpgicu23.so」を/usr/ libにコピーして問題を解決しましたが、「libstdc ++-libc6.2-2.so.3」が必要ですが、インターネットから取得すると「読み込み中にエラーが発生しました共有ライブラリ:/usr/lib/libstdc++-libc6.2-2.so.3:ELFファイルOSABIが無効です」

実際には、「libstdc++-libc6.2-2.so.3」から「libstdc++。so」へのシンボリックリンクも作成しましたが、lddを介して問題を解決したにもかかわらず、isqlを照会するとこのエラーが発生しました。

isql:シンボルルックアップエラー:/usr/dlc/odbc/lib/pgoe1023.so:未定義のシンボル:__ builtin_vec_new

* nixボックスにodbcをインストールしたことはありませんが、Windowsボックスにも同じことを行ったので、問題なく動作しました。任意の入力をいただければ幸いです。

4

2 に答える 2

15

unixODBCとドライバーが同じアーキテクチャーであることを確認します。つまり、次のコマンドを実行します。

which isql
file xxx (whatever came back from above)
file /usr/dlc/odbc/lib/pgoe1023.so

どちらも32ビットまたは64ビットである必要があります。64ビットのunixODBCは32ビットのドライバーを使用できません。その逆も同様です。

そのシンボリックリンクは必要ありません。

/usr/dlc/odbc/lib/pgoe1023.soでlddを実行して、すべての依存関係が検出されていることを確認します。

/usr/dlc/odbc/lib/pgoe1023.soが実行可能であることを確認してください。

ところで、odbc.iniファイルの内容はodbcinst.iniである必要があり、その逆もあるため、ラベルの取得方法が間違っていると思います。

于 2012-04-25T15:52:11.637 に答える
2

チェックすることの1つは、ドライバーがリンクされているunixODBCライブラリのマイナーバージョン番号です。unixODBC 2.3.1以降、64ビットプラットフォームでのSQLLENサイズの変更を反映するために、マイナーライブラリ番号を2に変更しました。ただし、ドライバーlibが以前のバージョンに対してリンクされている場合は、libodbc.so.1を検索し、現在のソースはlibodbc.so.2を提供します。簡単な解決策は、*。so.1から*.so.2へのシンボリックリンクを提供することです。同じことがlibodbcinst.soにも当てはまるので、それも確認してください。

于 2012-05-30T09:27:44.590 に答える