apache1.3のバージョンアップ-解決編
10月2日のエントリで書いたapache1.3.39+mod_jkでのmod_jkのmakeの際に発生した以下のエラーの件。
gcc -I/home1/hoge/apache/apache_1.3.39/src/include -I/home1/hoge/apache/apache_1.3.39/src/os/unix -g -O2 -DJK_PREFORK -g -O2 -DJK_PREFORK -I /include -I /include/ -c jk_connect.c -fPIC -DPIC -o .libs/jk_connect.o jk_connect.c: In function 'nb_connect': jk_connect.c:186: error: 'socklen_t' undeclared (first use in this function)
このエラーが発生したのはSolaris2.6。この環境で/usr以下のincludeを全部検索してもsocklen_tは見つかりません。Solaris9環境でこうやって探してみると、簡単に解が見つかりました。
$ find . -name '*.h' -exec fgrep socklen_t {} /dev/null \; | grep typedef ./include/sys/socket.h:typedef size_t socklen_t; ./include/sys/socket.h:typedef uint32_t socklen_t;
/usr/include/sys/socket.hをのぞいてみると該当箇所はこんなの。
#if defined(_XPG4_2) && !defined(_XPG5) && !defined(_LP64) typedef size_t socklen_t; #else typedef uint32_t socklen_t; #endif /* defined(_XPG4_2) && !defined(_XPG5) && !defined(_LP64) */
というわけで socklen_t は size_t と同値ということで。
native/common/jk_connect.cの186行目を次のように変更。
/* socklen_t rclen = (socklen_t)sizeof(rc); */ size_t rclen = (size_t)sizeof(rc);