Dev-C++やwxDev-C++でWindowsのDLLを使用するには?
テーマ:準備良く知っている人なら、知っていることかもしれませんが、
「わたくし~毎日、未熟者♪」で、知りませんでした。![]()
すみません。。
さて、どこからお話しましょうか。
普通に考えると、対象のDLLのライブラリ(*.lib)ファイルをリンクすればいいじゃん!って思いますよね。
でもダメなんです!
まず、ライブラリファイルにはDLL内の関数の位置と名前が記述されているようです。
ところが、その名前がWindowsとDev-C++シリーズ(mingwと言い換えてもよいです)では、違うのです。
例:関数mysql_closeの場合
Windows ⇒ mysql_close
Dev-C++ ⇒ mysql_close@4
なので、Windows用のライブラリをリンクしてコンパイルしたEXEは、DLLの中から関数が見つからず、「エントリポイントが見つからない」のようなエラーになります![]()
それらを解消する方法を見てみましょう。
【*.aライブラリファイルを作成する方法】
①DLLから、関数の一覧をエクスポートします。
pexportsを使用します。持っていない方は、ダウンロード してみてください。
以下のコマンドを打ちます。
pexports "DLLファイルのパス" > "出力ファイル名.def"
②プログラムをコンパイルして、リンクエラーを出させます。
以下のようなエラーが複数でます。
[Linker Error] undefined reference to `mysql_real_connect@32
③①のファイルを開いて編集します。エラーと同じ「@nn」を付けます。
編集前:
mysql_real_connect
編集後
mysql_real_connect@32
④すべてのエラーの「@nn」を編集したら、以下のコマンドを打ちます。
dlltoolを使用します。
たいてい、「C:\Program Files\Dev-Cpp\bin」に入っています。
dlltool --dllname "DLL名" --input-def "①のファイル" --output-lib ライブラリ名.a -k
赤字の部分は、対象物にあわせて修正してください。
※ちなみに、-kが@nnをうまく消して、WindowsのDLLにあわせてくれるオプションです。
⑤④で作成された.aファイルをプロジェクトにリンクしてください。
どうでしょう。うまく行きましたか?
参照:
・Dev-C++ や wxDev-C++ でMySQLを使用するコンパイル設定をするには?
http://bytes.com/forum/thread160335.html
(↑そんな質問の解決法、みんな知ってる!のような回答にショック受けました。。)
http://www.emmestech.com/moron_guides/moron1.html


