[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[plamo:25541] Re: Samba3.0.14aがコンパイルできません(Plamo4.02)
-
From:KOJIMA Mitsuhiro
-
Date:Wed, 18 May 2005 11:21:45 +0900 (JST)
- Subject: [plamo:25541] Re: Samba3.0.14aがコンパイルできません(Plamo4.02)
- From: KOJIMA Mitsuhiro <kojima@xxxxxxxxxxx>
- Date: Wed, 18 May 2005 11:23:30 +0900 (JST)
From: ak@kitahara.jp
Subject: [plamo:25533] Samba3.0.14aがコンパイルできません(Plamo4.02)
Date: Tue, 17 May 2005 22:41:16 +0900
> 調べてみたところ、
> /usr/include/bits/syscall.h には
> #define SYS_utimes __NR_utimes
> という定義があるのですが、
> /usr/include/asm/unistd.h には
> __NR_utimes が定義されていないのが原因のようです。
>
> samba-3.0.14a/source/smbwrapper/realcalls.h の
> #ifndef REPLACE_UTIMES
> #ifdef SYS_utimes
> #define real_utimes(fn, buf) (syscall(SYS_utimes, (fn), (buf))) // ←これ
> #else
> #define REPLACE_UTIMES 1
> #endif
> #endif
> が定義されてしまうが、__NR_utimes(SYS_utimesがマクロで変換されたもの)が
> 定義されていないのでエラーになってしまうようです。
>
> Plamo4.01の時はSambaのコンパイルができていたので、何が違うのか探してみたところ、
> /usr/include/bits/syscall.h はlibcのパッケージに入っているようなので
> Plamo 4.01と比べてみたところ、
> Plamo 4.01 : libc-2.3.2-i386-P4
> Plamo 4.02 : libc-2.3.3-i586-P1
> と、libcのバージョンが異なっていました。
> (Plamo4.01の方の /usr/include/bits/syscall.h には
> SYS_utimes の定義はありませんでした)
ざっと見ですが,2.4 カーネルの i386 な環境では __NR_utimes の定義が無
く,2.6 カーネルになってこの定義が導入されたようです.
------------
kojima@celeron[~]% find /usr/src/linux-2.4.29/include/ | xargs grep __NR_utimes
/usr/src/linux-2.4.29/include/asm-alpha/unistd.h:#define __NR_utimes 363
/usr/src/linux-2.4.29/include/asm-sparc/unistd.h:#define __NR_utimes 138 /* SunOS Specific */
/usr/src/linux-2.4.29/include/asm-ia64/unistd.h:#define __NR_utimes 1036
/usr/src/linux-2.4.29/include/asm-sparc64/unistd.h:#define __NR_utimes 138 /* SunOS Specific */
----------
kojima@celeron[~]% find /usr/src/linux-2.6.10/include/ | xargs grep __NR_utimes
/usr/src/linux-2.6.10/include/asm-m68knommu/unistd.h:#define __NR_utimes 266
/usr/src/linux-2.6.10/include/asm-sh/unistd.h:#define __NR_utimes 271
/usr/src/linux-2.6.10/include/asm-x86_64/unistd.h:#define __NR_utimes 235
/usr/src/linux-2.6.10/include/asm-x86_64/unistd.h:__SYSCALL(__NR_utimes, sys_utimes)
/usr/src/linux-2.6.10/include/asm-alpha/unistd.h:#define __NR_utimes 363
/usr/src/linux-2.6.10/include/asm-ppc64/unistd.h:#define __NR_utimes 251
/usr/src/linux-2.6.10/include/asm-sparc/unistd.h:#define __NR_utimes 138 /* SunOS Specific */
/usr/src/linux-2.6.10/include/asm-i386/unistd.h:#define __NR_utimes 271
/usr/src/linux-2.6.10/include/asm-cris/unistd.h:#define __NR_utimes 271
/usr/src/linux-2.6.10/include/asm-m32r/unistd.h:#define __NR_utimes 271
/usr/src/linux-2.6.10/include/asm-ia64/unistd.h:#define __NR_utimes 1036
/usr/src/linux-2.6.10/include/asm-m68k/unistd.h:#define __NR_utimes 266
/usr/src/linux-2.6.10/include/asm-mips/unistd.h:#define __NR_utimes (__NR_Linux + 267)
/usr/src/linux-2.6.10/include/asm-mips/unistd.h:#define __NR_utimes (__NR_Linux + 226)
/usr/src/linux-2.6.10/include/asm-mips/unistd.h:#define __NR_utimes (__NR_Linux + 230)
/usr/src/linux-2.6.10/include/asm-sh64/unistd.h:#define __NR_utimes 299
/usr/src/linux-2.6.10/include/asm-arm/unistd.h:#define __NR_utimes (__NR_SYSCALL_BASE+269)
/usr/src/linux-2.6.10/include/asm-ppc/unistd.h:#define __NR_utimes 251
/usr/src/linux-2.6.10/include/asm-sparc64/unistd.h:#define __NR_utimes 138 /* SunOS Specific */
-----------
だから,本来,i386 環境の 2.4 カーネルでは smbwrapper/wrapped.c の
463 #ifdef HAVE_UTIMES
464 int utimes(const char *name, const struct timeval *tvp)
465 {
466 if (smbw_path(name)) {
467 return smbw_utimes(name, tvp);
468 }
469
470 return real_utimes(name, tvp);
471 }
472 #endif
HAVE_UTIMES は define されるべきではないのですが,glibc-2.3.3 を使うと
この定義が何らかの理由で define されてしまい,このようなエラーになるの
ではないかと思います.
この utimes はマイクロ秒レベルでタイムスタンプを設定する機能であり,無
ければ無いで(utime の秒レベルが使われるから)問題ないはずなので,この部
分をコメントアウトしてしまうというのはどうでしょう?
-------
こじま
- References
-
- [plamo:25533] Samba3.0.14aがコンパイルできません(Plamo4.02), ak
[検索ページ]
[メール一覧]
Plamo ML 公開システム