gcc3.4.2と Oracle InstantClient

カテゴリ: SYSTEM開発・運用
| | コメント(0) | トラックバック(0)

職場での話。
以前書いたプログラム(最初に書いたのは 8年ぐらい前)が、RedHat Linux ES4だとエラーになると、同僚にいわれたので、メッセージを確認すると、「too few template-parameter-lists」みたいなエラーが出ている。

他の環境では通っているし、テンプレートのパラメタリストは間違っていないと思うし...
おかしいなぁ。コンパイラが gcc(g++) 3.4.2と新しいから、そのせいかなぁ?

ちょっと腰をすえて調べないと分からなさそうなので、自分の作業用PCの VMWareに 、同じRedHat ES4をインストールしてやってみる...

当然だが、同じエラーが出るので、メッセージをGoogleで調べると、gccの Bugzillaが引っ掛かる。

http://gcc.gnu.org/bugzilla/show_bug.cgi?id=17445

おいおいコンパイラのバグかよ。と思って状況の方を確認すると...「Resolution: INVALID」

へ?仕様?仕様なの?特に変な書き方はしていないと思うけど...ダメなんですか?

疑問が増したので、Bugzillaにある議論を読むと、なんか、頭に「template <>」を付けないとだめらしい。
ダメな理由がよく分からないので、ARMとかプログラミング言語 C++のテンプレートのとこを読み直してみる。
でも、やっぱりよく分からない。いまいち納得できないけど、確かにそう変更すればエラーにならないし、古い gcc2.8.1でもエラーにならないから、Bugzillaにあるように修正していく。
# C++のテンプレートは便利なんだけど、仕様が複雑怪奇すぎる...

そうこうしながらコンパイル時のエラーは大体やっつけたものの、最終的には Oracleのライブラリがないとアプリ全体のコンパイルは完了しない。
でも、とりあえず確認のために作った環境に Oracleクライアントのインストールをするのも面倒なので、以前から気になっていた、Oracle InstantClientを試しに入れてみることにする。

まずはOTNのOracle Instant Clientのページからダウンロードする。(OTNのアカウントが必要)

ダウンロードしたZIPを展開して、出来たディレクトリを見てみると、いきなり共有ライブラリファイルがころがっている。

ん?あれ?・・・インストーラーは?ドキュメントは?普通あるべきファイルが見当たらない?

もう一回ダウンロードしたページに戻って探してみると、アーカイブを展開したらインストールしなくても動かせるって書いてある。
・・・動かせるっていったって、tnsnames.oraぐらいは書かないとダメだと思うんだけど、何処に置くんだ?

疑問が増したので、さらにドキュメントを探すと、セットアップガイドという PDFがあったので読んでみる。
・・・「@」の後ろに直接「ホスト名:ポート/サービス名」と書けば tnsnames.oraは不要です。

ふーむ・・・でも、そういえば、逆に最初に Oracle使ったときは、何でいちいち tnsnames.oraにサーバを定義しなければならないんだろ、面倒だなぁと思ったなぁ、慣れというのは恐ろしい... (^^;;;;;;;;;;;

確かにインストール作業が不要なのは楽かもしれないが、これまで書いたアプリの Makefileは、ORACLE_HOMEの場所だけが可変で、その下の構成は固定であることを前提にしていたため、その前提に沿っていない InstantClientの SDKは、 Makefileも直さないと使えない。
結構面倒だが、InstantClientは今後使うこともあるだろうから、この際、ちゃんとconfigure.inから直していくことにする...
なんかトータルでは、結局普通にクライアントインストールした方が早かったかなぁというぐらいの時間がかかってしまったが、まぁ経験値は稼げたから良しとしよう。(^^;;

「SYSTEM開発・運用」の新着

トラックバック(0)

このブログ記事を参照しているブログ一覧: gcc3.4.2と Oracle InstantClient

このブログ記事に対するトラックバックURL: http://morishoji.homelinux.net/mt/mt-tb.cgi/19

コメントする

最近のコメント


最近のコメントを表示...
Powered by Movable Type 4.01