No.16983![]() |
エラーについて 投稿者---yuji(2004/09/30 19:50:45) |
||
make するとエラーがでちゃいます. /usr/include/GL/glut.h:202: declaration of 'void exit (int)' throws different exceptions と /usr/include/stdlib.h:578: than previous declaration 'void exit (int) throw ()' がでてしまいます. このエラーの意味がどうしてもわからなくて困っています. 解決策もわからなくて,なにかアドバイスもらえませんか? |
No.16986![]() |
Re:エラーについて 投稿者---シャノン(2004/09/30 21:31:14) |
||
>make するとエラーがでちゃいます. >/usr/include/GL/glut.h:202: >declaration of 'void exit (int)' throws different exceptions >と >/usr/include/stdlib.h:578: than previous declaration 'void exit (int) throw ()' >がでてしまいます. >このエラーの意味がどうしてもわからなくて困っています. >解決策もわからなくて,なにかアドバイスもらえませんか? exit の宣言が違うためでしょう。 glut.h では void exit( int ) と宣言され、 stdlib.h では void exit( int ) throw() と宣言されています。 前者は void exit( int ) throw( ... ) と同義ですから、 この相違から出ているメッセージだと思われます。 解決策は…どなたかバトンタッチ。 |
No.16987![]() |
Re:エラーについて 投稿者---tetrapod(2004/10/01 08:34:34) |
||
> void exit (int) throw () は C++ 固有の関数宣言であり C の文法とは反しています。 # ISO/IEC14882:1998 3.6.1 には void exit(int); とあるため C++ 規格書にも反している こんなヘンなことをやっている処理系(コンパイラ・OSの名称・バージョン) はなんでしょうか。 参考までに知りたいです。 解決策をいくつか考えてみました。 1.ソースコードを C++ ではなく C で書く 2./usr/include/stdlib.h 中の exit の宣言が C 互換になるようスイッチで細工 3./usr/include/GL/glut.h 中の exit の宣言が C++ 互換になるようスイッチで細工 4./usr/include/GL/glut.h 中で exit が宣言されないようスイッチで細工 スイッチで細工、とは、ヘッダファイルはたいてい #if defined(HOGEHOGE) void exit(int); #else void exit(int) throw(); #endif のように #if 系で宣言がくくってあるので、その #if のスイッチ、 上記例では HOGEHOGE を自分で #define したり #undef したりすることを言います。 決して stdlib.h や glut.h を書き換えないでください。 |
No.16991![]() |
Re:エラーについて 投稿者---yuji(2004/10/01 10:53:35) |
||
ありがとうございます. 一応,現在エラーの内容は理解できました. >こんなヘンなことをやっている処理系(コンパイラ・OSの名称・バージョン) はなんでしょうか。 >参考までに知りたいです。 OS:RedHat7.0J kernel2.2.16 です. それで,質問したいのですが,glut.hはredhatのインストールの時点で入っていたのでしょうか?実は,僕は初心者でそれを確認することなく,OpenGL入門のHPからGLUTをインストールしてしまい,glut.hが書き換えられた可能性が高くて,この解決策が見つかりません. 方法として,インストールの2枚のCDからrpmでいれなおすのかなあと思ったのですが, どのrpmにglut.hがはいっているのかわからずに、断念しています. また,以下の方法が理解できないのですが?ヘッダを書き換えてはいけないのですか? どのようにすればいいのでしょうか? >スイッチで細工、とは、ヘッダファイルはたいてい >#if defined(HOGEHOGE) >void exit(int); >#else >void exit(int) throw(); >#endif >のように #if 系で宣言がくくってあるので、その #if のスイッチ、 >上記例では HOGEHOGE を自分で #define したり #undef したりすることを言います。 |
No.16992![]() |
Re:エラーについて 投稿者---tetrapod(2004/10/01 11:31:24) |
||
私も最近 Linux 追っかけしていませんので RH7.0J がどうなっているのかは知りません。 stdlib.h の当該行の前後を提示していただければ何とかなるかもしれません。 |
No.16993![]() |
Re:エラーについて 投稿者---yuji(2004/10/01 11:38:31) |
||
>私も最近 Linux 追っかけしていませんので RH7.0J がどうなっているのかは知りません。 いろいろと質問しちゃってすみません. >stdlib.h の当該行の前後を提示していただければ何とかなるかもしれません。 #ifdef __USE_ISOC99 extern void _Exit (int __status) __THROW __attribute__ ((__noreturn__)); #endif となっています. これでいいのでしょうか?? |
No.16994![]() |
Re:エラーについて 投稿者---yuji(2004/10/01 11:55:41) |
||
いま,glut.hの exitのところをコメントアウトしたら、同じエラーはでなくなりました. この解決策ではとてもこわいのですが,なんとかこれで先に進みたいと思います. ありがとうございました. |
No.16995![]() |
Re:エラーについて 投稿者---nop(2004/10/01 12:44:10) |
||
>いま,glut.hの >exitのところをコメントアウトしたら、同じエラーはでなくなりました. >この解決策ではとてもこわいのですが,なんとかこれで先に進みたいと思います. >>決して stdlib.h や glut.h を書き換えないでください。 の一文は無視ですか? # とりあえず、コメントアウトではなく、 # 「#include <glut.h>」などの前に#defineするのがよいでしょう。 |
No.16996![]() |
Re:エラーについて 投稿者---yuji(2004/10/01 12:58:17) |
||
いいえ、無視していません. まず、先に進めたいのでしかたなくやりました. 良い方法ではないですが、まずこの方法でいこうとおもってやりました. OSをもう一度入れ直すことも考えて、やってます. ので、stlib.hなどをかえました. で,先ほどアドバイスいただいた4つくらいの方法を 僕より詳しいひとといっしょに試しましたが,うまくいかないので こうしました |
No.16997![]() |
Re:エラーについて 投稿者---yuji(2004/10/01 12:59:59) |
||
追記 すみません.しっかり読んでいませんでした. #defineでやります. アドバイスありがとうございます. |