2011-02-07 8 views
1

私はRoguewaveライブラリを使ってC++からSybaseデータベースに接続しています。RWDBManager :: databaseに共有ライブラリ名が必要なのはなぜですか?

RWDBManager::database("accessLib", "", "", "", "", "XA=lrm_name"); 

http://www2.roguewave.com/support/docs/sourcepro/edition8/html/dbxaug/5-3.html

All arguments are of type RWCString. Note that establishing an XA connection to the Sybase CT database requires only two of the six database() arguments, as described here: 

    accessLib 

    The argument for the first parameter is the same as that which you provide for the non-XA connection. 

    For static libraries, supply the string "SYBASE_CT". 

    For shared libraries, supply the name of your shared access library, for example "libctl420d.so". 

私は理解していないと言う:私は、データベース・オブジェクトは次のように構成されていることが理解コードで

、私は見慣れています、我々は、使用しなければならないときそのライブラリのヘッダーを含み、このライブラリのクラス/関数を使用し、プロジェクトをコンパイルする際に、このライブラリをLDLIBRARIESリストで使用します。ここの関数データベースにライブラリのNAMEが必要なのはなぜですか? #includeアプローチに対するこのアプローチの利点は何ですか?

標準的な技術ですか?通常、これはどこで使用されていますか? 私は共有ライブラリを使用したプロジェクトで作業しています。したがって、リンクは静的に行われませんでしたが、私はそのようなことに遭遇しませんでした。

おかげで、

+0

Roguewaveデータベースのドキュメントに従って、dlopenを使用してこの共有ライブラリを動的にロードしています。私の次の質問は、Roguewaveがこのデザインを選んだ理由です。彼らは**この共有ライブラリを**動的にリンクすることができますが**ダイナミックにロード**することはできません。 – xyz

+0

あなたの質問を編集してください、それはそうです:) – neuro

答えて

1

彼らは動的にそれは名前とPOSIXシステム上のdlopen()のような標準的な呼び出しの使用してライブラリをロードするので、それはおそらくです。窓には同等のものがありますが、それはLoadLibrary()だと思います。このようなシステムでは、ライブラリを読み込んでライブラリからシンボルを取得することができます。プラグインシステムやそのようなものを構築するのに非常に便利です。彼らはこのデザインを選ぶ理由として

:それはまた、あなたがそれらが存在する場合にのみ、...

は、例えばhereを見る

MY2C

EDITライブラリを強化するいくつかのパフォーマンスを使用することができますあなたに推測する必要があります:

私の推測:DBドライバをプラグインアーキテクチャで維持するのが簡単:インストールが簡単で、バージョン間の切り替えが簡単で、バイナリパッチを簡単に配布できます。

別の推測:ある種のイントロスペクション/リフレクションを実装する唯一の方法。

+0

こんにちは、Roguewaveデータベースモジュールがdlopenを使って与えられた共有ライブラリを動的にロードするのは確かですが、Rogueaveのドキュメントのように次の質問はRoguewaveが選んだ理由ですこの設計は、これを共有ライブラリとして維持することと反対のものです。 **動的に**リンクされている可能性がありますが、なぜそれらを動的にロード**することを選択したのでしょうか? – xyz

+0

@learnerforever:あなたは彼らに尋ねるべきだと思います;)私は私の編集された答えにいくつかの推測をします... – neuro

関連する問題