From ruby-ext-admin@ruby-lang.org Fri Feb 14 19:08:08 2003 Received: from kankan.nagaokaut.ac.jp (kankan.nagaokaut.ac.jp [133.44.2.24]) by blade.nagaokaut.ac.jp (8.12.3+3.5Wbeta/8.12.6/Debian-8) with ESMTP id h1EA889D011459; Fri, 14 Feb 2003 19:08:08 +0900 Received: from funfun.nagaokaut.ac.jp (funfun [133.44.2.201]) by kankan.nagaokaut.ac.jp (8.11.3/8.11.3) with ESMTP id h1EA8GP54801; Fri, 14 Feb 2003 19:08:16 +0900 (JST) (envelope-from ruby-ext-admin@ruby-lang.org) Received: from helium.ruby-lang.org (helium.ruby-lang.org [210.251.121.214]) by voscc.nagaokaut.ac.jp (8.12.5/8.12.3) with ESMTP id h1EA8CqL026546; Fri, 14 Feb 2003 19:08:12 +0900 (JST) (envelope-from ruby-ext-admin@ruby-lang.org) Received: from helium.ruby-lang.org (localhost [127.0.0.1]) by helium.ruby-lang.org (Postfix) with ESMTP id BF3C2479; Fri, 14 Feb 2003 19:08:10 +0900 (JST) Date: Fri, 14 Feb 2003 19:01:32 +0900 From: KUBO Takehiro Reply-To: ruby-ext@ruby-lang.org Subject: [ruby-ext:02140] Re: OCI8 on SPARC (mkmf.rb?) To: ruby-ext@ruby-lang.org (ruby-ext ML) Message-Id: <18jcez-10N-00@mail.jiubao.org> In-Reply-To: <18jbMU-0qq-00@mail.jiubao.org> (KUBO Takehiro's message of "Fri, 14 Feb 2003 17:38:22 +0900") References: <200302140827.h1E8RRf8009215@bell.kcom.co.jp> <18jbMU-0qq-00@mail.jiubao.org> X-ML-Name: ruby-ext X-Mail-Count: 02140 X-MLServer: fml [fml 4.0.3 release (20011202/4.0.3)]; post only (only members can post) X-ML-Info: If you have a question, send e-mail with the body "help" (without quotes) to the address ruby-ext-ctl@ruby-lang.org; help= X-Face: .I77-jh,SD:HK62+ppq-\SjzRmfp5P]tlL[G"$ty'muyfA*8:D]cmVjx`)In/h1"&fS$[V~ A)/\#2GSIrK,^/!4$NLAvccw;qZ@{KN*\D8|:T}Vs"j]UUNha;@*k+?soD/iFN5T[@8Mz7rp(5@vwa U[n{;\}#!b?{^~_fvg9fh=j}>ITU"(M:2@(Bjsn)[FMV)l!`j="{vd$jbhiV>1jW0|t=Cmf(22&6?h]m-n(]5gP Mime-Version: 1.0 (generated by SEMI 1.14.4 - "Hosorogi") Content-Type: text/plain; charset=ISO-2022-JP Precedence: bulk Lines: 83 List-Id: ruby-ext.ruby-lang.org List-Software: fml [fml 4.0.3 release (20011202/4.0.3)] List-Post: List-Owner: List-Help: List-Unsubscribe: X-Virus-Scanned: by AMaViS perl-10 久保@茅ヶ崎市です。 KUBO Takehiro writes: >> 【環境】 >> (1) Solaris8 (sparc) >> (2) % gcc -v >> Reading specs from /usr/local/lib/gcc-lib/sparc-sun-solaris2.8/2.95.3/specs >> gcc version 2.95.3 20010315 (release) >> sunSITE から入手した package でインストール (snip) >> 【実行結果】 >> % make >> cd src && ruby extconf.rb >> Get the version of Oracle from SQL*Plus... 920 >> try -I/app/oracle/product/9.2.0.1.0/rdbms/demo >> checking for oci.h... no >> try -I/app/oracle/product/9.2.0.1.0/rdbms/demo -I/app/oracle/product/9.2.0.1.0/ >> rdbms/public >> checking for oci.h... yes >> Running make for $ORACLE_HOME/rdbms/demo/demo_rdbms.mk ...OK >> checking for OCIInitialize()... no >> ./oraconf.rb:95:in `initialize': cannot compile OCI (RuntimeError) >> from extconf.rb:21:in `new' >> from extconf.rb:21 >> *** Error code 1 >> make: Fatal error: Command failed for target `src/Makefile' > > src/mkmf.log を送ってもらえませんか? > ファイルサイズが大きいようでしたら、直メールでお願いします。 メール、受け取りました。ありがとうございます。 結論からいうと、$ORACLE_HOME/rdbme/demo/demo_rdbms.mk が gcc に対応し てないからでした。おそらく SUN の cc なら大丈夫ではないかと思います。 具体的には、SUN の cc のオプション '-K PIC' を gcc にわたしてエラーに なってました。これは gcc では -fPIC に相当します。 Ruby/OCI8 は $ORACLE_HOME/rdbms/demo/demo_rdbms.mk を実際に動かしてみ て、C コンパイラにわたすオプションを決めています。どうしてこういうこと をしているかというと、昔の Oracle は OS によって、また Oracle のバー ジョンが変わるごとにリンクするライブラリがいろいろ変わってしまうためで す。OS毎・バージョン毎に cc にわたすオプションを列挙するのは面倒なので、 demo_rdbms.mk から自動的にオプションをとってしまおうというわけです。 問題は、Solaris 版 Oracle の demo_rdbms.mk は SUN の cc でコンパイルす ることを前提にしていて、gcc でコンパイルすることは考慮されてないという ことです。 # というか、gcc でコンパイルしたものは Oracle の保証外になるでしょう。 うーむ。Oracle 保証外になっても良いなら gcc でコンパイルする手もありま す。 Oracle 8 以降は Oracle 7 のように様々なライブラリをリンクしなくて も、libclntsh.so さえリンクすればだいたい動くようになっています。 # Linux 版 Oracle の特定の version では -lwtc8 が必要だったりと例外が # あります。Solaris 版の Oracle 9.2.0 がその例外じゃなければ動くでしょ # う。 具体的には、src/oraconf.rb の 94-96行目 unless have_func("OCIInitialize", "oci.h") raise 'cannot compile OCI' end を unless have_func("OCIInitialize", "oci.h") @libs = " -L#{@oracle_home}/lib -lclntsh" $libs += " -L#{CONFIG["libdir"]} " + @libs puts 'try again' unless have_func("OCIInitialize", "oci.h") raise 'cannot compile OCI' end end に変えてもう一度やってみてください。 # 手元に Oracle がないのでテストしてません。 では、再見 -- 神奈川県茅ヶ崎市在住 久保 健洋 email: kubo@jiubao.org web: http://www.jiubao.org GnuPG fingerprint = 5F7B C8EF CA16 57D0 FDE1 9F47 C001 1F93 AC08 2262