プロが教える店舗&オフィスのセキュリティ対策術

MYSQLをインストールして./configureまで完了したのですが、makeすると以下のようになります。
make[2]: *** [libmysql.lo] エラー 1
make[2]: 出ます ディレクトリ `/usr/local/src/mysql-4.0.17/libmysql'
make[1]: *** [all-recursive] エラー 1
make[1]: 出ます ディレクトリ `/usr/local/src/mysql-4.0.17'
make: *** [all] エラー 2

apacheは失敗続きもインストールできたのですが
上記は何を意味しているのでしょうか?

A 回答 (5件)

これはエラーメッセージの最後の部分だと思います


コンパイルエラーは連鎖的に発生するので、エラーの出始めの部分から順に解決していく必用があります。

最初にエラーになっている部分の前後10行ずつぐらいを
貼ってみてください。

この回答への補足

長いコメント失礼いたします。
こちらです。

gcc -DDEFAULT_CHARSET_HOME=\"/usr/local/mysql\" -DDATADIR=\"/usr/local/mysql/var
\" -DSHAREDIR=\"/usr/local/mysql/share/mysql\" -DUNDEF_THREADS_HACK -DDONT_USE_R
AID -DMYSQL_CLIENT -I. -I. -I.. -I./../include -I../include -I./.. -I.. -I.. -O3
-DDBUG_OFF -c libmysql.c -MT libmysql.lo -MD -MP -MF .deps/libmysql.TPlo -fPIC
-DPIC -o .libs/libmysql.lo
libmysql.c: In function `mysql_real_connect':
libmysql.c:1797: warning: passing arg 5 of `gethostbyname_r' from incompatible p
ointer type
libmysql.c:1797: too few arguments to function `gethostbyname_r'
libmysql.c:1797: warning: assignment makes pointer from integer without a cast
make[2]: *** [libmysql.lo] エラー 1
make[2]: 出ます ディレクトリ `/usr/local/src/mysql-4.0.17/libmysql'
make[1]: *** [all-recursive] エラー 1
make[1]: 出ます ディレクトリ `/usr/local/src/mysql-4.0.17'
make: *** [all] エラー 2

補足日時:2004/01/12 17:06
    • good
    • 0

失敗を少なくする為には


1.README等は、しっかり読む。
2.configure後は、config.logの内容を見る。

問題解決をスムーズに行うには
1.UNIXのCプログラミング、メークファイル作成、コンパイルを行っていき基礎的なデバッカを身に付ける。(時間にゆとりあれば勉強してください)

急がば回れです。
    • good
    • 0

翻訳します。


libmysql.c: In function `mysql_real_connect':
このmysql_real_connect関数において
libmysql.c:1797: warning: passing arg 5 of `gethostbyname_r' from incompatible p
ointer type
意味:5番目のパラメータのポインターの型が合っていない。
対策:合うようにキャストする。(警告なので無視しても良い)
libmysql.c:1797: too few arguments to function `gethostbyname_r'
意味:gethostbyname_rを呼び出すときの引数が足りない。
対策:引数の数をプロトタイプに合わせ、追加する。

gethostbyname_rについては手元に資料がないので、よくわかりませんが、gethostbynameは、ホスト名からそのホストのIPアドレスなどの情報を取得する関数です。man gethostbyname_rで、その詳細がわかるはずですので、それで調べてみて下さい。

libmysql.c:1797: warning: assignment makes pointer from integer without a cast
意味:整数型のデータからキャストせずにポインターを作ります。
対策:合うようにキャストする(警告なので無視して良い)

この回答への補足

たびたびすいません。
プロトタイプとは具体的にはどう追記すればよろしいのでしょうか

[libmysql.c:1797]
hp = my_gethostbyname_r(host,&tmp_hostent,buff2.buff,sizeof(buff2),
&tmp_errno);


[man gethostbyname_r]
GETHOSTBYNAME(3) Linux Programmer's Manual GETHOSTBYNAME(3)

名前
gethostbyname, gethostbyaddr, sethostent, endhostent, herror, hstrerror
- ネットワーク上のホストのエントリを取得する

書式
#include <netdb.h>
extern int h_errno;

struct hostent *gethostbyname(const char *name);

#include <sys/socket.h> /* for AF_INET */
struct hostent *gethostbyaddr(const char *addr,
int len, int type);

void sethostent(int stayopen);

void endhostent(void);

void herror(const char *s);

const char *hstrerror(int err);

補足日時:2004/01/13 21:43
    • good
    • 0

#3です。


>プロトタイプとは具体的にはどう追記すればよろしいのでしょうか
1797: too few arguments to function `gethostbyname_r' のメッセージから
gethostbyname_rとmy_gethostbyname_rはおなじものと解釈します。(違う場合はmy_gethostbyname_rのプロトタイプ(この関数の引数について記述した部分)を提示してください)
man gethostbyname_rより
int gethostbyname_r (const char *name,
struct hostent *ret, char *buf, size_t buflen,
struct hostent **result, int *h_errnop);
が得られます。
ここで、引数の数は6個です。
一方、hp = my_gethostbyname_r(host,&tmp_hostent,buff2.buff,sizeof(buff2),
&tmp_errno); では5個です。
従って、数が合わず、エラーとなります。
対策:(勘です。)struct hostent **resultの部分がたりないので、これを補います。
struct hostent *temp_result;と定義し
hp = my_gethostbyname_r(host,&tmp_hostent,buff2.buff,sizeof(buff2),
&temp_result,&tmp_errno); としてください。
    • good
    • 0
この回答へのお礼

どうもありがとうございました。
残念ながら私には無理そうです。
mysqlのバージョンはいくつか試してみたのですが、
ダメでした。
インストールはソースで行いたいので、まったく別の方法ございましたらお知らせください。
gethostbyname_rの元を変更するなど、ありがとうございました。

お礼日時:2004/01/14 01:27

>インストールはソースで行いたいので、まったく別の方法ございましたらお知らせください。



こちらでは、フルインストールしたRedHat9 で、MySQL4.0.17は問題なく
インストールできますし、問題なく動いています。

# ./configure
# make
# make install


MySQLのコンパイルに必要な何かがインストールされていないのでは?
    • good
    • 0
この回答へのお礼

そのとおりのようでした。mysqlのサイトを見てみたところこの種のエラー報告が見つかったのですが、
If you get a compilation error on Linux (e.g. SuSE Linux 8.1 or Red Hat Linux 7.3) similar to the following one:
libmysql.c:1329: warning: passing arg 5 of `gethostbyname_r' from
incompatible pointer type
libmysql.c:1329: too few arguments to function `gethostbyname_r'
libmysql.c:1329: warning: assignment makes pointer from integer
without a cast
make[2]: *** [libmysql.lo] Error 1
By default, the configure script attempts to determine the correct number of arguments by using g++ the GNU C++ compiler. This test yields wrong results, if g++ is not installed. There are two ways to work around this problem:
次のものに似ているLinux(例えばSuSE Linux 8.1あるいはRed Hat Linux 7.3)の上の編集エラーを得る場合:libmysql.c:1329:警告:非互換性のポインター・タイプlibmysql.cから「gethostbyname_r」のarg 5を渡すこと:1329:関数「gethostbyname_r」libmysql.cへのあまりにも少数の議論:1329:警告:割り当てはキャストのない整数でポインターを作ります。[2]を作ってください:***[libmysql.lo]エラー1デフォルトによって、configureスクリプトは、g++の使用により議論の正確な数を決定することを試みます、GNU C++コンパイラー。g++がインストールされない場合、このテストは間違っている結果を産出します。この問題のまわりで働くために2つの方法があります:
Make sure that the GNU C++ g++ is installed. On some Linux distributions, the required package is called gpp, on others it is named gcc-c++.
GNU C++g++がインストールされることを確かめてください。
Use gcc as your C++ compiler by setting the CXX environment variable to gcc:
export CXX="gcc"

gccにCXX環境変数をセットすることによりあなたのC++コンパイラーとしてgccを使用してください:輸出CXX=「gcc」
Please note that you need to run configure again afterwards.
走る必要があることに注意してください、形成する、再び後で。

***********************
となっておりました。少し前進できました
ありがとうございます

お礼日時:2004/01/18 14:28

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