SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

DeveloperZine(デベロッパージン)- エンジニアの意思決定を支える技術情報メディア ProductZine

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

japan.internet.com翻訳記事

Win32で動作するMySQL 5.1用ストレージエンジンプラグイン

遅延読み込みを活用する

インポートライブラリの作成

1. 静的インポートライブラリを作成する

 リンカーの要件を満たすために、mysqldのすべてのオブジェクトを基にしたライブラリファイルを作成する必要があります。必要なオブジェクトのリストを取得するために、私は簡単なバッチスクリプトを作成しました。mysqldのビルド処理の際にcmakeによって作成されるbuild.makeファイルから取得を行います。それには、コンパイル済みオブジェクトとbuild.makeファイルが必要なので、mysqldをコンパイルしていない場合、まずはコンパイルしてください。具体的には、MySQLのソースのルートディレクトリで、次のように入力します。

cmake.exe" . -G "NMake Makefiles"

 バッチスクリプトmake_lib.cmdを作業ディレクトリ(win\delayload)に置きます。

 このディレクトリでシェルを開き、VC環境をセットアップします(vcvars32.batを実行)。スクリプトを正しく実行するには、パスの通った場所にlib.exeツールが必要だからです。そして、次のようにスクリプトを実行します。

make_lib

 これで、すべてのオブジェクトを取り込んだ新しい静的ライブラリmysqld-test-static.libができあがります。

 実は、この時点でプラグインを使用することも不可能ではありません。この静的ライブラリファイルには必要な関数がすべて取り込まれているので、これにリンクすれば事足りるからです。しかしそれでは、.dllファイルのサイズがmysqld.exeと同じかそれ以上になってしまい、ナンセンスです。そこで、次の手順でこれをDLLに変換し、リンカー用のインポートライブラリを生成して、遅延読み込みを指定できるようにします。.dllファイルを作成することはできませんが、インポートライブラリを作成すればうまくいくはずであり、それで十分です。

2. 静的ライブラリをDLLに変換する

 次は、静的ライブラリをDLLに変換する作業です。これはかなり込み入った作業です。MSVCのデフォルトのツール群では、すべてのシンボルをエクスポートするDLLを自動的に作成するのは不可能です。そこで、再びちょっとしたヘルパースクリプトの力を借りる必要があります。このスクリプトは、Grigore Stefan氏が作成した変換スクリプトを一部借用しています。氏のオリジナルのスクリプトはhttp://forums.microsoft.com/MSDN/ShowPost.aspx?PostID=496762&SiteID=1にあります。

 ただし、MySQLのインポートライブラリ作成にあたっては、スクリプトに修正が必要でした。元のスクリプトは非常に速度が遅かったうえ、データエクスポート用に有効な.defファイルが作成されませんでした。マークが行われず、エクスポートされた各シンボルがすべてインポートライブラリ用の関数となっていたのですが、それでは誤りです。

 エクスポート用の正しい.defファイルを作成するには、2つのGPLプログラムの力を借りる必要があります。1つはMinGWのdlltool、もう1つはGNUのストリームエディタsedです。dlltoolでは、先に作成した静的ライブラリのすべてのエクスポートを含む有効な.defファイルを作成できます。またsedでは、作成される.defファイルに含まれるいくつかのエラーを修正できます。詳細については、バッチスクリプトを参照してください。このdlltool.exeとsed.exeを、パスの通った場所に置きます。これらのツールをお持ちでない場合は、ダウンロードのうえ、作業ディレクトリに展開しておいてください。Visual Cのビルド環境を既にセットアップ済みのシェルで、次のように実行します。

lib_to_dll mysqld

 これにはかなりの時間がかかることがありますが、すべてうまくいった場合には、インポートライブラリmysqld.libができあがります。

次のページ
プラグインのセットアップ

この記事は参考になりましたか?

japan.internet.com翻訳記事連載記事一覧

もっと読む

この記事の著者

japan.internet.com(ジャパンインターネットコム)

japan.internet.com は、1999年9月にオープンした、日本初のネットビジネス専門ニュースサイト。月間2億以上のページビューを誇る米国 Jupitermedia Corporation (Nasdaq: JUPM) のニュースサイト internet.comEarthWeb.com からの最新記事を日本語に翻訳して掲載するとともに、日本独自のネットビジネス関連記事やレポートを配信。

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

Ludwig Ertl(Ludwig Ertl)

8歳でプログラミングを始める。最初はCommodore 64のBASICで、後にIBM PCに移行。アセンブラとCを愛好し、システムレベルプログラミングへの造詣を深めた。現在は、オーストリアの医療ソフトウェア企業でUNIXのCプログラマとして勤務。システムプログラミング全般に深い興味を持ち、特にIn...

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

CodeZine(コードジン)
https://codezine.jp/article/detail/2009 2008/01/21 14:00

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー