dポイントプレゼントキャンペーン実施中!

borland c++でMySQLデータベースへ接続したいのですが、

外部シンボル 'mysql_real_connect' が未解決
外部シンボル 'mysql_init' が未解決
外部シンボル 'mysql_close' が未解決

というエラーが出てしまいます。

******** 現状 ***********
(1) インクルードしているヘッダファイルは、
  <my_global.h>
  <mysql.h>
  <my_sys.h>
  です。
(2) ソースコードは、
 conn = mysql_init(NULL);
if(mysql_real_connect(conn,opt_host_name,opt_user_name,opt_password,opt_db_name,opt_port_num,opt_socket_name,opt_flags) == NULL)
{
fprintf(stderr,"mysql_real_connect() failed\n");
mysql_close(conn);
exit(1);
}
mysql_close(conn);
exit(0);

といった感じです。

(3) implib を用いて、
  libmySQL.lib から libmySQL.dll へ変換し、
  実行したいソースと同じフォルダに置き、
  リンクしています。

どなたか、ご回答よろしくお願いいたします。

                     

A 回答 (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 ファイルを眺めると、何かわかるかもしれません。
    • good
    • 0

状況は確かに、「リンクに失敗している」ですね。



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

これで、OKのはずですが。

この回答への補足

ご回答ありがとうございます。

ご指摘の通り、私のタイプミスでした。

implibでlibmySQL.lib を生成し、
それをリンクしています。
しかし、エラーが出てしまいます。

よろしければ、解決法などご教授ください。

補足日時:2006/02/03 10:53
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!