良く知っている人なら、知っていることかもしれませんが、

「わたくし~毎日、未熟者♪」で、知りませんでした。あせる


すみません。。


さて、どこからお話しましょうか。



普通に考えると、対象の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