![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?5a7ff87)
「mysqlclient」の事が分からないでいます。
Cからmysql接続をするプログラムを作っていたのですが、
makefileに「-lmysqlclient」を入れておけよ!
と先輩に言われたので、
そのとおり、
それをLDFLAGSに追加しておいたら、
確かに、コンパイルが出来て、
mysql接続も成功していたのですが、
どうも自分で分からない事が有ります。
「mysql.h」をCプログラムの先頭でincludeしたり、
「mysql.h」ファイルの位置を
MakefileのLDFLAGSに書いて、
mysqlの関数を使うための下地を作っておくなら
何となく理解出来るのですが、
どうして、
「-lmysqlclient」をすべきなのでしょうか。
「mysqlclient」を探しても、
特にそんなファイルなども見つかりませんでしたしが、
確かに、この「-lmysqlclient」をなくしてしまうと、
コンパイルが上手く通らないです。
「mysqlclient」とは何なのでしょうか。
どうして、mysqlのAPIを使うのに、
mysql.hだけではなく、「mysqlclient」も必要なのでしょうか?
Cを勉強しだしたばかりの弱小者ですが、
アドバイスをいただいた先輩も出張に行ってしまい、
聞ける人もいないため、
アドバイスいただけるとありがたいです。
宜しくお願い致します。
No.2ベストアンサー
- 回答日時:
>どうして、
>「-lmysqlclient」をすべきなのでしょうか。
libmysqlclient.soにある関数を使用するから…です。
リンカにどこのライブラリに使用する関数があるのか、指定しないとリンクできないでしょう。
# できあがったバイナリを実行するときにOSがロードし、プロセス空間にマッピングしてくれます。
>特にそんなファイルなども見つかりませんでしたしが、
場所によるのでしょうが……手元のCentOS5.4では、
/usr/lib/mysqlの下にlibmysqlclient.so.15というのがあります。
>どうして、mysqlのAPIを使うのに、
>mysql.hだけではなく、「mysqlclient」も必要なのでしょうか?
mysql.hにはプロトタイプ宣言などだけでmysqlの機能を使用するのに必要な関数の実体がないから…です。
Wr5さん!
教えていただきありがとうございます。
すごく分かりやすく感謝しております。
確かに、
「mysqlclient」では探すことが出来ませんでしたが、
「libmysqlclient.so」や「libmysqlclient.so.15」
というのはありました!(fedora9)
----
# locate libmysqlclient
/lib/mysql++-3.0.9/libmysqlclient.def
/usr/lib/mysql/libmysqlclient.a
/usr/lib/mysql/libmysqlclient.so
/usr/lib/mysql/libmysqlclient.so.15
/usr/lib/mysql/libmysqlclient.so.15.0.0
/usr/lib/mysql/libmysqlclient_r.a
/usr/lib/mysql/libmysqlclient_r.so
/usr/lib/mysql/libmysqlclient_r.so.15
/usr/lib/mysql/libmysqlclient_r.so.15.0.0
----
つまり、
「mysqlclient」というファイルがあるというのではなく、
「libmysqlclient.so」に入っているAPIを使うために、
「mysql.h」だけではなく、
「mysqlclient」をリンクさせているのですね!
続けての疑問で大変恐縮ですが、
何故、
「libmysqlclient.so」の中のAPIを使うのに、
「libmysqlclient.so」をリンクさせるのではなく、
「mysqlclient」をリンクさせているのでしょうか?
つまり、ファイル名でもないのに、
どうしてリンク先に「mysqlclient」という言葉が発想されたのか?が
どうしても分からないです。
物分りが悪くすいませんが教えて頂けるととてもありがたいです。
宜しくお願い致します。
No.3
- 回答日時:
>続けての疑問で大変恐縮ですが、
>何故、
>「libmysqlclient.so」の中のAPIを使うのに、
>「libmysqlclient.so」をリンクさせるのではなく、
>「mysqlclient」をリンクさせているのでしょうか?
細かい経緯は知りませんが…
リンカがそういう作りになっているから…としか。
man ldより…
-lar アーカイブファイル ar をリンクするファイルのリストに加える。このオプションは何回でも指定できる。 ld は ar が指定されるごとに、 libar.a が見つかるまで検索パスを探す。
ということで、リンクするのに使用されたのは「libmysqlclient.a」でしょうか。
私のところにはmysqlの開発用パッケージが入っていないのでlibmysqlclient.aは見つからなかったのでしょう。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- MySQL mysqlがインストールされているのかどうか 1 2023/06/05 14:19
- MySQL mysqlがインストールされているのかわかりません 1 2023/06/05 02:26
- MySQL MySQLのテーブル作成でハイフン - は使用できないのでしょうか? 2 2022/10/21 16:50
- MySQL XamppでインストールしたMySQLのフォルダのWinRARでのバックアップについて 1 2022/06/22 18:55
- MySQL 参考書に従って入力したつもりでしたが、最後はエラーがでました。 1 2022/09/28 03:45
- その他(プログラミング・Web制作) mariadbでのエラー 1 2022/11/15 12:31
- PHP ログイン機の付きの掲示板サイトを作りたいです。 2 2022/10/09 04:33
- PostgreSQL PostgressからMySQL(MariaDB)へ構造を変更する際のTimestamp等について 2 2023/04/04 12:09
- MySQL あと、MySQLの文字コードはutf8 気になりますね 1 2022/12/01 07:22
- PHP PHP & MySQL: Server-side Web Development ペーパ 1 2022/04/19 19:23
関連するカテゴリからQ&Aを探す
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
宜しくお願いします。
-
phpのエラーについてです
-
PHP/MySQL SQLエラーについて。
-
データベースから多次元連想配...
-
MySQLのデータを使ってプルダウ...
-
phpでmysqlを使ってデータベー...
-
テキストボックスに入れた内容...
-
MYSQLからphpで取り出した...
-
SQL文が実行できません
-
OR検索を実装したい
-
連想配列、オブジェクト配列の...
-
phpで複数の検索語を検索対象に...
-
PHPについてなのですが未定義の...
-
会員サイトでログイン後の会員...
-
mysql_real_escape_string
-
SQL文の実行に失敗しました???
-
検索結果をgoogleのように数件...
-
DAOでデータベースを二つ開くに...
-
データをDBからひっぱってき...
-
ランダム文字列をDBにINSERT
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
テーブルに入っているデータと...
-
sqlから多次元配列に要素を格納...
-
SQL文2つ実行
-
phpのエラーについてです
-
stringaddslashes 半角¥が消える
-
mysql_fetch_objectのエラー
-
XAMPPで画面が真っ白になります。
-
XAMMPが起動しません。
-
縦に長い<table>でなく横に長い...
-
PHP+mysqlでSQL文に文字数制限...
-
会員登録したらメールが送られ...
-
Resource id #3 をフィールドの...
-
MySQLのデータを使ってプルダウ...
-
PHPで絞り込み検索結果の件数を...
-
MySQLのUPDATE実行結果を受け取...
-
mysql_query等でレコード数を変...
-
住所録を作りたい
-
DB(MySQL)から複数行のデータを...
-
CSVをダウンロードさせた際、CS...
-
SQLの結果が返ってこない
おすすめ情報