OSX10.6ユキヒョウを実行しているIntelMacからリモートシステム上のOracle10.2.0.4に接続しようとしています。perlCPANを使用してDBD::Oracleをインストールしようとしましたが(DBIは正常に機能しました)、コンパイルエラーが発生します。誰かがわかりやすいガイドを提供できますか?
5 に答える
perlのMacインストールをOracleとうまく連携させるのは少し面倒です。一度実行すると素晴らしいですが、実行するのは少しイライラします。
以下は、いくつかの異なるIntel Macで私のために機能しました。そこには余分な手順がある可能性があり、他のプラットフォームでは同じではない可能性があります。
これには、シェル、rootユーザー、および少しのCPANを使用する必要があります-それほど面倒なことはありません
まず、oracle papのディレクトリを作成します-ライブラリ、インスタントクライアントなど
sudo mkdir /usr/oracle_instantClient64
すべての64ビットインスタントクライアントパッケージをOracleから上記のディレクトリにダウンロードして抽出します
そのディレクトリ内にあるファイルの1つにシンボリックリンクを作成します
sudo cd /usr/oracle_instantClient64
sudo ln -s /usr/oracle_instantClient64/libclntsh.dylib.10.1 libclntsh.dylib
次のディレクトリは、Oracleインスタントクライアントにハードコードされています-神は理由を知っています-したがって、それを作成してシンボリックリンクする必要があります
sudo mkdir -p /b/227/rdbms/
sudo cd /b/227/rdbms/
sudo ln -s /usr/oracle_instantClient64/ lib
いくつかの環境変数を追加する必要があるため、/ etc / profileを編集して追加し、すべてのユーザーに存在するようにします。
export ORACLE_HOME=/usr/oracle_instantClient64
export DYLD_LIBRARY_PATH=/usr/oracle_instantClient64
次に、CPANを介してDBD :: Oracleをインストールしてみてください-これは失敗しますが、依存関係がダウンロードされ、モジュールが取得されることを意味します
sudo perl -MCPAN -e shell
install DBD::Oracle
これが失敗した場合は、CPANを終了し、.cpan / buildディレクトリに移動します-CPANの自動構成を使用した場合は、次のようになります。
cd ~/.cpan/build
自動構成しなかった場合は、CPANで次のコマンドを使用してビルドディレクトリを見つけることができます
o conf build_dir
ビルドディレクトリに移動したら、作成されたばかりのDBD :: Oracleディレクトリ(DBD-Oracle-1.28-?などと呼ばれます)を探して、そこに挿入します。
次に、rootユーザーに切り替える必要があります。ルートはosxではデフォルトで有効になっていません-有効にする方法の詳細については、アップルのWebサイトのこの投稿を参照してください
rootとしてログインしたら、rootに上記の環境変数を設定する必要があります。
export ORACLE_HOME=/usr/oracle_instantClient64
export DYLD_LIBRARY_PATH=/usr/oracle_instantClient64
rootとしてログインしたまま、モジュールのmakefileを実行し、make、installを実行する必要があります。
perl Makefile.pl
make
make install
すべてがエラーなしで機能したと仮定すると、ルートからログアウトします。DBDが終了しました。これがうまくいかなかった場合は、あなたが見ているどんなエラーでもグーグルを破滅させる時が来ました
DBIモジュールをインストールするだけです
sudo perl -MCPAN -e shell
install DBI
今、あなたはすべて準備ができています-あなたの完全に神秘的な新しい人生を楽しんでください
user852637からの追加情報:
このステップの修正
perl Makefile.pl make install
最後のステップは
make install
make中に、次のようなエラーが発生する場合があります。
リポ:入力ファイルを開くことができません:/var/tmp//ccIevTzM.out(そのようなファイルまたはディレクトリはありません)
これを修正するには、「perl Makefile.pl」ステップの後に作成されたファイル「Makefile」を編集し、次のテキストのすべての出現箇所を削除する必要があります。
-arch ppc
これにより、エラーが解消されます。
DBIモジュールのインストール中に、(2。)で説明したのと同じエラーが発生します。
Makefile
ステップの後に作成されたものを編集しperl Makefile.pl
、次のテキストのすべての出現箇所を削除する必要があります。-arch ppc
XCode4の変更(PPCアーチサポートの削除)では、Perlインストールは10.6.Xの更新のいずれでも更新されておらず、PPCバイナリも削除されています(おそらくRosettaがまだ存在しているため)。
このため、構成ファイルは「-arch ppc」を保持し、MakeMakerの出力Makefileに-arch ppcが含まれているため、Cライブラリを使用したすべてのCPANモジュールのコンパイルが失敗します。
これを修正するには、次のファイルを編集できます。
/System/Library/Perl/5.10.0/darwin-thread-multi-2level/Config_heavy.pl
1219行目には次のように表示されます。
$archflags = exists($ENV{ARCHFLAGS}) ? $ENV{ARCHFLAGS} : '-arch x86_64 -arch i386 -arch ppc';
これを次のように変更します。
$archflags = exists($ENV{ARCHFLAGS}) ? $ENV{ARCHFLAGS} : '-arch x86_64 -arch i386';
これを行うと、生成されたMakefileが正しくなります。
これらは素晴らしい一連の指示です。潜在的な「落とし穴」について他にいくつかコメントがあります。
このステップの修正
perl Makefile.pl make install
最後のステップは
make install
make中に、次のようなエラーが発生する場合があります。
リポ:入力ファイルを開くことができません:/var/tmp//ccIevTzM.out(そのようなファイルまたはディレクトリはありません)
これを修正するには、「perl Makefile.pl」ステップの後に作成されたファイル「Makefile」を編集し、次のテキストのすべての出現箇所を削除する必要があります。
-arch ppc
これにより、エラーが解消されます。
DBIモジュールのインストール中に、(2。)で説明したのと同じエラーが発生します。
Makefile
ステップの後に作成されたものを編集しperl Makefile.pl
、次のテキストのすべての出現箇所を削除する必要があります。-arch ppc
「PerlMakeFile.pl」コマンドがPerlのバージョンを正しく検出していないようで、次のエラーメッセージが表示されます。
bash-3.2# perl Makefile.PL
Multiple copies of Driver.xst found in: /Library/Perl/5.10.0/darwin-thread-multi-2level/auto/DBI/ /System/Library/Perl/Extras/5.10.0/darwin-thread-multi-2level/auto/DBI/ at Makefile.PL line 37
Using DBI 1.616 (for perl 5.010000 on darwin-thread-multi-2level) installed in /Library/Perl/5.10.0/darwin-thread-multi-2level/auto/DBI/
Configuring DBD::Oracle for perl 5.010000 on darwin (darwin-thread-multi-2level)
Remember to actually *READ* the README file! Especially if you have any problems.
Installing on a darwin, Ver#10.0
Using Oracle in /usr/oracle_instantClient64
Can't find sqlplus. Pity, it would have helped.
I'm having trouble finding your Oracle version number... trying harder
WARNING: I could not determine Oracle client version so I'll just
default to version 8.0.0.0. Some features of DBD::Oracle may not work.
Oracle version based logic in Makefile.PL may produce erroneous results.
You can use "perl Makefile.PL -V X.Y.Z" to specify a your client version.
Oracle version 8.0.0.0 (8.0)
DBD::Oracle no longer supports Oracle client versions before 9.2
Try a version before 1.25 for 9 and 1.18 for 8! at Makefile.PL line 175.
I've triple checked that I've downloaded and installed the proper 64-bit drivers from Oracle. I also checked to make sure that I'm running 64-bit Perl.
このようにバージョン番号を強制すると:
perl MakeFile.pl -V 10.2.0.4
完了しましたが、「make」を実行するとエラーメッセージが表示されます。
Oracle.c:2267: error: ‘SQLT_BIN’ undeclared (first use in this function)
Oracle.c:2277: error: ‘SQLCS_NCHAR’ undeclared (first use in this function)
Oracle.c:2281: error: ‘SQLT_INT’ undeclared (first use in this function)
Oracle.c:2283: error: ‘OCI_FETCH_PRIOR’ undeclared (first use in this function)
Oracle.c:2287: error: ‘OCI_FETCH_NEXT’ undeclared (first use in this function)
lipo: can't open input file: /var/tmp//ccyIFLPN.out (No such file or directory)
make: *** [Oracle.o] Error 1
これは、Makefileから削除する必要がある「-archppc」引数が原因であることがわかりましたが、32ビット参照をすべて削除した後でも、エラーメッセージが表示されました。
OracleDriverバージョン10.2.0.4で10.6.8SnowLeopardを実行する
この問題の鍵は、MakeFile.plがOracleバージョンを確実に検出できるようにすることであることがわかりました。
私が遭遇した問題は、SafariがOracle.comからzipファイルをダウンロードしていたが、それらを解凍し、どういうわけかライブラリを破損していたことでした。
代わりに、別のブラウザを使用して、すべてのzipファイルを1つのディレクトリにダウンロードしました。次に、次のtarコマンドを実行しました。
tar -xf instantclient-basic-10.2.0.4.0-macosx-x64.zip
tar -xf instantclient-sdk-10.2.0.4.0-macosx-x64.zip
tar -xf instantclient-sqlplus-10.2.0.4.0-macosx-x64.zip
「instantclient_10_2」フォルダ内のすべての内容を$ORACLE_HOME(前に設定)にコピーします
sudo cp -R instantclient_10_2/* $ORACLE_HOME
また、「-arch ppc」参照を削除するために、MakeFile.plスクリプトによって生成されたMakefileを編集する必要はありませんでした。
クライアントライブラリパッケージャと同じディレクトリ構造をマシン上に再作成しないでください。
しないでくださいmkdir -p /b/227/rdbms/
MacOSXライブラリヘッダー管理ツールを使用する:otool
およびinstall_name_tool
たとえば、ライブラリヘッダーをデプロイメントアーキテクチャに更新しました。
otool -L /usr/oracle_instantclient/11.2.0.3.0-64-bit/libclntsh.dylib.11.1
/usr/oracle_instantclient/11.2.0.3.0-64-bit/libclntsh.dylib.11.1:
/ade/b/2649109290/oracle/rdbms/lib/libclntsh.dylib.11.1 (compatibility version 0.0.0, current version 0.0.0)
/ade/b/2649109290/oracle/ldap/lib/libnnz11.dylib (compatibility version 0.0.0, current version 0.0.0)
/usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 159.1.0)
install_name_tool -id /usr/oracle_instantclient/11.2.0.3.0-64-bit/libclntsh.dylib.11.1 \
-change /ade/b/2649109290/oracle/ldap/lib/libnnz11.dylib /usr/oracle_instantclient/11.2.0.3.0-64-bit/libnnz11.dylib /usr/oracle_instantclient/11.2.0.3.0-64-bit/libclntsh.dylib.11.1
otool -L /usr/oracle_instantclient/11.2.0.3.0-64-bit/libclntsh.dylib.11.1
/usr/oracle_instantclient/11.2.0.3.0-64-bit/libclntsh.dylib.11.1:
/usr/oracle_instantclient/11.2.0.3.0-64-bit/libclntsh.dylib.11.1 (compatibility version 0.0.0, current version 0.0.0)
/usr/oracle_instantclient/11.2.0.3.0-64-bit/libnnz11.dylib (compatibility version 0.0.0, current version 0.0.0)
/usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 159.1.0)
Oracle InstantClientライブラリに付属するすべてのファイルを確認し、すべての依存ライブラリのパスを修正します
otool -L adrci
otool -L genezi
otool -L libclntsh.dylib.11.1
otool -L libheteroxa11.dylib
otool -L libnnz11.dylib
otool -L libocci.dylib.11.1
otool -L libociei.dylib
otool -L libocijdbc11.dylib
otool -L libsqlplus.dylib
otool -L libsqlplusic.dylib
otool -L sqlplus
otool -L uidrvci
次に、ダイナミックライブラリを本来あるべき場所にリンクします。
export DYLD_LIBRARY_PATH
システムのセットアップ方法を知っているので、それを使用することを避けることができます
cd /usr/lib
ln -s ../oracle_instantclient/11.2.0.3.0-64-bit/libclntsh.dylib.11.1 .
ln -s ../oracle_instantclient/11.2.0.3.0-64-bit/libclntsh.dylib.11.1 libclntsh.dylib
ln -s ../oracle_instantclient/11.2.0.3.0-64-bit/libheteroxa11.dylib .
ln -s ../oracle_instantclient/11.2.0.3.0-64-bit/libnnz11.dylib .
ln -s ../oracle_instantclient/11.2.0.3.0-64-bit/libocci.dylib.11.1 .
ln -s ../oracle_instantclient/11.2.0.3.0-64-bit/libocci.dylib.11.1 libocci.dylib
ln -s ../oracle_instantclient/11.2.0.3.0-64-bit/libociei.dylib .
ln -s ../oracle_instantclient/11.2.0.3.0-64-bit/libocijdbc11.dylib .
ln -s ../oracle_instantclient/11.2.0.3.0-64-bit/libsqlplus.dylib .
ln -s ../oracle_instantclient/11.2.0.3.0-64-bit/libsqlplusic.dylib .