[pgsql-jp: 28775] Re: インクルードファイル

Kazumasa Gotoh kgotoh @ cic-kk.co.jp
2003年 1月 26日 (日) 12:02:18 JST


From: 石田雅也 <ishida_m @ 15jam.jp>
Date: Sun, 26 Jan 2003 11:32:25 +0900

> > crypt() が未解決外部参照となっているのです。
> 記述が不足していました。申し訳ありません。
> cryptの問題ということはわかっていたのですが、
> cryot.hは/usr/include/に存在しています。

いや、ですから「コンパイル時」の問題なのではなく「リンケージ時」の
問題なのです。そこを取り違えると話がずれます。

あなたが引用したメッセージにある通り、crypt() は libpq の fe-auth()
から参照されています。したがって、ヘッダファイルの存在の有無は
今回の問題に限って言えば関係ありません。

> 書き忘れていたので、あとで再投稿しました。

「自分が何をしたか」が書かれていません。今回のケースで言えば、
「どんなコマンドを投入してリンケージを行ったか」が不明です。

結局、石田さんは Unix 系 OS で C を使って開発するという事に
関して、基本的な知識が足りない部分があるように私は見受けられます。
いや、本当は C で開発する場合は Windows 系でも同じ事なのですが、
Visual Studio 環境下などで WIN32 の標準 API だけを使っていると
この点が顕在化しないだけのことです。
# ある意味では、ツールが面倒な部分を隠蔽化しているとも言える。

まぁ、「はじめて使ったコンピュータは Windows マシンでした」という
人にはありがちな事ですので、おいおい勉強してゆけばよいでしょう。

おそらくは crypt() を含んだライブラリはそのマシンにも存在している
と思います。つまり、リンケージオプションが足りないのでしょう。

「具体的にどうすればよいのか」というのは、OS などの環境依存です。
経験があれば PostgreSQL のドキュメントを読むだけでわかるはずですし、
先のエラーメッセージだけで「あぁ…」とわかるはずですが、例えば
PostgreSQL のソースを展開して Configure した後に、psql などの
libpq を使っているプログラムの Makefile を見るという方法もあります。

こうすれば、どんなライブラリの指定が必要かがわかるでしょう。
psql の Makefile にはあなたが書いたプログラムには不要なライブラリも
指定されているでしょうが、そこは調べればわかる事です。

Makefile の読み方がわからなければ make のマニュアルを読みましょう。
読み方がわかっても、そこに書かれている意味がわからなければ、
リンカである ld や Linux のマニュアルを読みましょう。

=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
(株) セントラル情報センター
                             後藤和政    kgotoh @ cic-kk.co.jp



pgsql-jp メーリングリストの案内