• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:borland c++ によるMySQL へのアクセス)

borland c++でMySQLデータベースへの接続ができないエラーの解決方法

このQ&Aのポイント
  • borland c++でMySQLデータベースへの接続ができない問題が発生しています。外部シンボル 'mysql_real_connect' が未解決、外部シンボル 'mysql_init' が未解決、外部シンボル 'mysql_close' が未解決というエラーが表示されています。
  • 現在の状況として、使用しているヘッダファイルは<my_global.h>、<mysql.h>、<my_sys.h>です。ソースコードでは、mysql_init()で接続を初期化し、mysql_real_connect()で接続を確立し、mysql_close()で接続を閉じています。
  • また、implibを使用してlibmySQL.libからlibmySQL.dllに変換し、実行したいソースと同じフォルダに配置してリンクしています。解決方法についてご教示いただけると幸いです。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.2

まず、libmySQL.lib は本当にプロジェクトに入っていますでしょうか(失礼します。いや、これは時々あるので) 次は、impdef で、dll から .def ファイルを作ってみてください。この .def ファイルは、テキストファイルですので、エディタ等で開けます。 ここで、.dll の中にある関数の一覧が得られます。 この関数の名前が、 'mysql_real_connect' や、'mysql_init' や 'mysql_close' であることを確認してみてください。 関数の名前に、一見意味不明の文字が付いていることがあります。これは、C++のリンケージ規約でコンパイルされた結果です。 この場合、以下の方法を試してみることになります。 1.おそらく、mysql.h の中に、 extern "C" の宣言があると思いますので、一度、この宣言をなくして試してみてください。 2.それでもだめな場合は、他のコンパイラ(Windows 環境なら、Microsoft か、Sygwin なら、Gcc)のC++でコンパイルしてありそうなので、該当のコンパイラを使うということになります。 3.もしも、limmySql.h のなかに、extern "C" がない場合、(これは、リンクエラーの関数名が、Cのリンケージ規約の関数名なので、可能性低いですが)関数プロトタイプの前に、 extern "C" をつけてみてください。 いずれにしても、.def ファイルを眺めると、何かわかるかもしれません。

その他の回答 (1)

回答No.1

状況は確かに、「リンクに失敗している」ですね。 タイプミスかも知れませんが、implib は、.dll から、.lib を生成するツールです。 もともと、libmySQL.dll があった場合に、これから、libmySQL.lib を生成します。 そして、プロジェクトに、他のソースファイルと一緒に、libmySQL.lib を追加しておきます。 これで、OKのはずですが。

hirama
質問者

補足

ご回答ありがとうございます。 ご指摘の通り、私のタイプミスでした。 implibでlibmySQL.lib を生成し、 それをリンクしています。 しかし、エラーが出てしまいます。 よろしければ、解決法などご教授ください。

関連するQ&A