印刷用表示へ切り替え 通常表示へ切り替え 更新履歴を表示 更新履歴を隠す
Linux GCC のバージョンが古い?

いつもなら問題なくコンパイルできる DeleGate だが,最新の 8.11.0 では失敗してしまう。gcc のバージョンが古いのが原因だそうで,8.11.1-pre1 以降で対応してくれている。gcc 2.95 は古かったのか…。

■ ■ ■

Vine Linux 2.6 の gcc のバージョンは 2.95 である。

$ gcc -v
Reading specs from /usr/lib/gcc-lib/i386-redhat-linux/2.95.3/specs
gcc version 2.95.3 20010315 (release)

Vine Linux の最新版は 3.1 で,これに同梱されているのは gcc 3.3.2 である(Past news from Project Vine)。GCC - Linux Wiki のウォッチリストによれば,2.95.3 のリリースは 2001-03-16 で,このバージョンを最後 2.x 系の開発は終了。gcc はメジャーバージョンアップされて現在は 2004-11-07 リリースの 3.4.3 となっている。

バージョンに左右されるようなコードを書いたことがないので,全然知らなかった。みんなよくやるなあ…。

さて,Vine Linux 2.6 の gcc-2.95.3 でコンパイルすると,delegate-8.11.0 は次のエラーでコンパイルに失敗する。このコンパイルエラーは FreeBSD 4.10 でも同様に起こるらしい。

以下は DeleGate のメーリングリストのアーカイブ DeleGate-ML を参考にしたメモである。

cc -O -x c++ -DQS -I../include  -c teleportd.c -o teleportd.o
In file included from teleportd.c:24:
../include/ystring.h:97: badly punctuated parameter list in `#define'
../include/ystring.h:98: badly punctuated parameter list in `#define'

ひっかかっているのは,include/ystring.h で,コンパイラが古いと指摘されている。問題の箇所とその修正は次のようになっている(http://www.delegate.org/mail-lists/delegate/12724)。

+#if __GNUC__ == 2 && __GNUC_MINOR__ <= 95
+#define sprintf(d,f,ARGS...) Xsprintf(TVSTR(d) d,f,##ARGS)
+#define Msprintf(d,f,ARGS...) Xsprintf(MVStr(d),f,##ARGS)
+#else
+#define sprintf(d,f,...)  Xsprintf(TVSTR(d) d,f,##__VA_ARGS__)
+#define Msprintf(d,f,...)  Xsprintf(MVStr(d),f,##__VA_ARGS__)

そろそろ古いコンパイラには対応したくないそうなので(http://www.delegate.org/mail-lists/delegate/12722),今後古いコンパイラを使わなければならない場合に気をつけておいた方がいいかも知れない。このエラーに対し,delegate8.11.1-pre3 では対応してくれていて,問題なくコンパイルできる。

DeleGate 経由で NetNews を読む場合,プロバイダによってはニュースサーバに問題があるため DeleGate のソースに手を入れる必要がある。So-net では junk と control ニュースグループの反応がないので,DeleGate が処理を進めることができないのである(nlog(n): DeleGate 8.9.2 + 個人的な修正)。

DeleGate 8.11.0 では nntp.c の書き換えが行われているため,該当する箇所の行数が変わっている。2086行目付近をコメントアウトすることになる。

/*
        if( get_pathhost0(ns,AVStr(pathhost),"junk") == 0 )
        if( get_pathhost0(ns,AVStr(pathhost),"control") == 0 )
                return;
*/
Posted by n at 2005-03-12 16:36 | Edit | Comments (0) | Trackback(0)
Trackbacks

  • 「手違いで複数トラックバックを送ってしまった!」という場合でも気にしないでください (重複分はこちらで勝手に削除させていただきます)
  • タイムアウトエラーは,こちらのサーバの処理能力不足が原因です (詳細は トラックバック送信時のエラー をご覧ください)
  • トラックバックする記事には,この記事へのリンクを含めてください(詳細は 迷惑トラックバック対策 をご覧ください)
Comments
Post a comment
  • 電子メールアドレスは必須ですが,表示されません (気になる場合は「メールアドレスのような」文字列でもOKです)
  • URL を入力した場合はリンクが張られます
  • コメント欄内ではタグは使えません
  • コメント欄内に URL を記入した場合は自動的にリンクに変換されます
  • コメント欄内の改行はそのまま改行となります
  • 「Confirmation Code」に表示されている数字を入力してください (迷惑コメント対策です)


(必須, 表示されます)


(必須, 表示されません)


(任意, リンクされます)


Confirmation Code (必須)


Remember info (R)?

Loading...