えんどう 2007/10/27 10:04:00 PDT Gauche CVS HEADをビルドすると以下のエラーが発生します。Boehm GC関係?
for d in gc src lib ext doc; do (cd $d; make all); done Making all in doc make[2]: Nothing to be done for `all'. Making all in include make[2]: Nothing to be done for `all'. source='darwin_stop_world.c' object='darwin_stop_world.lo' libtool=yes \ DEPDIR=.deps depmode=none /bin/sh ./depcomp \ /bin/sh ./libtool --mode=compile gcc -DPACKAGE_NAME=\"gc\" -DPACKAGE_TARNAME=\"gc\" -DPACKAGE_VERSION=\"6.8\" -DPACKAGE_STRING=\"gc\ 6.8\" -DPACKAGE_BUGREPORT=\"Hans.Boehm@hp.com\" -DGC_VERSION_MAJOR=6 -DGC_VERSION_MINOR=8 -DPACKAGE=\"gc\" -DVERSION=\"6.8\" -DGC_DARWIN_THREADS=1 -DSTDC_HEADERS=1 -DHAVE_SYS_TYPES_H=1 -DHAVE_SYS_STAT_H=1 -DHAVE_STDLIB_H=1 -DHAVE_STRING_H=1 -DHAVE_MEMORY_H=1 -DHAVE_STRINGS_H=1 -DHAVE_INTTYPES_H=1 -DHAVE_STDINT_H=1 -DHAVE_UNISTD_H=1 -DHAVE_DLFCN_H=1 -DSILENT=1 -DNO_SIGNALS=1 -DNO_EXECUTE_PERMISSION=1 -DALL_INTERIOR_POINTERS=1 -DJAVA_FINALIZATION=1 -DGC_GCJ_SUPPORT=1 -DATOMIC_UNCOLLECTABLE=1 -DDONT_ADD_BYTE_AT_END=1 -DLARGE_CONFIG=1 -I./include -fexceptions -g -O2 -fexceptions -c -o darwin_stop_world.lo darwin_stop_world.c rm -f .libs/darwin_stop_world.lo gcc -DPACKAGE_NAME=\"gc\" -DPACKAGE_TARNAME=\"gc\" -DPACKAGE_VERSION=\"6.8\" "-DPACKAGE_STRING=\"gc 6.8\"" -DPACKAGE_BUGREPORT=\"Hans.Boehm@hp.com\" -DGC_VERSION_MAJOR=6 -DGC_VERSION_MINOR=8 -DPACKAGE=\"gc\" -DVERSION=\"6.8\" -DGC_DARWIN_THREADS=1 -DSTDC_HEADERS=1 -DHAVE_SYS_TYPES_H=1 -DHAVE_SYS_STAT_H=1 -DHAVE_STDLIB_H=1 -DHAVE_STRING_H=1 -DHAVE_MEMORY_H=1 -DHAVE_STRINGS_H=1 -DHAVE_INTTYPES_H=1 -DHAVE_STDINT_H=1 -DHAVE_UNISTD_H=1 -DHAVE_DLFCN_H=1 -DSILENT=1 -DNO_SIGNALS=1 -DNO_EXECUTE_PERMISSION=1 -DALL_INTERIOR_POINTERS=1 -DJAVA_FINALIZATION=1 -DGC_GCJ_SUPPORT=1 -DATOMIC_UNCOLLECTABLE=1 -DDONT_ADD_BYTE_AT_END=1 -DLARGE_CONFIG=1 -I./include -fexceptions -g -O2 -fexceptions -c darwin_stop_world.c -fno-common -DPIC -o .libs/darwin_stop_world.lo darwin_stop_world.c: In function 'GC_push_all_stacks': darwin_stop_world.c:107: error: 'i386_thread_state_t' has no member named 'esp' darwin_stop_world.c:109: error: 'i386_thread_state_t' has no member named 'eax' darwin_stop_world.c:110: error: 'i386_thread_state_t' has no member named 'ebx' darwin_stop_world.c:111: error: 'i386_thread_state_t' has no member named 'ecx' darwin_stop_world.c:112: error: 'i386_thread_state_t' has no member named 'edx' darwin_stop_world.c:113: error: 'i386_thread_state_t' has no member named 'edi' darwin_stop_world.c:114: error: 'i386_thread_state_t' has no member named 'esi' darwin_stop_world.c:115: error: 'i386_thread_state_t' has no member named 'ebp' make[2]: *** [darwin_stop_world.lo] Error 1 make[1]: *** [all-recursive] Error 1 make[1]: *** No rule to make target `../gc/libgc.la', needed by `libgauche.dylib'. Stop.
./configure CFLAGS="-D__DARWIN_UNIX03=0"とすれば以前と同じ定義になり、Boehm GC 6.8のままでもビルド/テストを通ります。
*-*-cygwin*) AC_DEFINE(GC_WIN32_THREADS) ;; + *-*-darwin10.5) + CFLAGS="$CFLAGS -D__DARWIN_UNIX03=0" + AC_DEFINE(GC_DARWIN_THREADS) + if test "${enable_parallel_mark}" = yes; then + AC_DEFINE(PARALLEL_MARK) + fi + ;; *-*-darwin*) dnl [SK] This makes single-thread execution very slow, so disable by default. dnl The setting must match with src/gauche/memory.h dnl AC_DEFINE(THREAD_LOCAL_ALLOC)
for d in gc src lib ext doc; do (cd $d; make all); done Making all in doc make[2]: Nothing to be done for `all'. Making all in include make[2]: Nothing to be done for `all'. make[2]: Nothing to be done for `all-am'. GAUCHE_LOAD_PATH="" GAUCHE_DYNLOAD_PATH="" gosh -l./preload -I../src -I../lib ./geninsn *** ERROR: unbound variable: s? Stack Trace: _______________________________________ 0 options 1 (s? :squeeze #f) At line 60 of "../lib/text/tr.scm" 2 (d? :delete #f) At line 59 of "../lib/text/tr.scm" 3 options 4 options 5 (string-tr (x->string name) "-" "_") At line 52 of "././geninsn" 6 (c-insn-name name) At line 1 of "(input string port)" 7 (x->string (c-insn-name name)) [unknown location] 8 (string-append " " (x->string (c-insn-name name)) ",") [unknown location] 9 (cgen-extern (string-append " " (x->string (c-insn-name name)) ", ... At line 265 of "././geninsn" 10 proc 11 (map-with-index (lambda (count insn) (match insn ((_ name num-para ... At line 261 of "././geninsn" make[1]: *** [gauche/vminsn.h] Error 70のようなエラーが出ます。ちなみにこのマシンでGauche-0.8.11はビルド/テスト共に成功します。
び(2006/08/10 22:46:27 PDT): WWDCの開催に合わせて公開されたXcode-2.4をインストールしてGaucheをビルドすると、Boehm-gcのテストが失敗します。
gnumake check-TESTS thread_get_state failed FAIL: gctest ================================== 1 of 1 tests failed Please report to Hans.Boehm@hp.com ================================== gnumake[3]: *** [check-TESTS] Error 1 gnumake[2]: *** [check-am] Error 2 gnumake[1]: *** [check-recursive] Error 1
Gaucheそのもののmake checkは通るのですが、インストールしてmake install-checkすると、threadsのテストでやはり thread_get_state failed で落ちます。Xcode-2.3に戻して再ビルド/インストールするとこの現象は起きません。Xcode-2.4に含まれているGCCは
% gcc --version i686-apple-darwin8-gcc-4.0.1 (GCC) 4.0.1 (Apple Computer, Inc. build 5363) Copyright (C) 2005 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
です。しばらくはXcode-2.3のままにしておいた方がよさそうです。
Gauche:NetBSDにあったびさんのBoehm GC 6.7へのパッチをGauche CVS HEADにあてたらmake checkすべてpassしました。
http://www.hpl.hp.com/hosted/linux/mail-archives/gc/2006-February/001160.html
を Gauche-0.8.6 に当てたら動いた。 Gauche-gl は configure.in の powerpc-apple-darwin* を *-apple-darwin* に置き換えて autoconf し直したら動きました。
CVS HEADはとりあえず問題なくmakeもmake checkも通りました。(2005/04/30 17:03:21 PDT)
creating gctest make check-TESTS Switched to incremental mode Emulating dirty bits with mprotect/signals FAIL: gctest =================== 1 of 1 tests failed =================== make[3]: *** [check-TESTS] Error 1 make[2]: *** [check-am] Error 2 make[1]: *** [check-recursive] Error 1
-この問題は解決済みの模様
6.5 update: I disabled incremental GC on Darwin in this version, since I couldn't get gctest to pass when the GC was built as a dynamic library. Building with -DMPROTECT_VDB (and threads) on the command line should get you back to the old state. - HBとあるので、ひっかかっていた機能を殺しただけのようです。しかも現状のGaucheはlibgcをスタティックリンクしているので、いずれにしてもGaucheでは問題にならなかったようです。
ねるWiki:ねる Boehm GC を Darwin の pthreads上でも動くように hack してみました。パッチはこちら。テストはすべて通りますが、運用していないので安定するかどうかは良くわかりません。
Boehm GC が新バージョンになったため(?)、0.8.3をpthreads 上で使おうとすると以下のようなエラーがでてリンクできません。
ld: Undefined symbols: _GC_darwin_register_mach_handler_thread /usr/bin/libtool: internal link edit command failed make[1]: *** [libgauche.dylib] Error 1
2003/11/16 21:49:40 PST IPv6を有効にしてconfigure && makeすると、make checkで以下のようなエラーが発生します。
Testing net ... failed. discrepancies found. Errors are: test sockaddr_in6: expects #t => got #f
57行目の(sockaddr-name addr)が[2001:200::8002:203:47ff:fea5:3085]:23を返すのが原因です。 確かにNetBSDなどは[2001:200:0:8002:203:47ff:fea5:3085]:23を返しますが、OS Xが返す値は間違いと言ってしまっていいのかちょっと疑問が残ります。しばらく前のCVS HEADからこうなっていたと思います。10.2.8、10.3、10.3.1のいずれでも発生します。
--enable-ipv6をつけてconfigure && make すると、ext/net/net.c がコンパイルエラーとなります。 /usr/include/sys/socket.h を眺めた結果、'CPPFLAGS=-D_BSD_SOCKLEN_T_=u_int' をつけて configure すれば問題なくmakeでき、echo-server.scm に telnet ::1 3131 で接続できることはわかりました。ただ、対処の仕方がこれで正当なのかどうかはちょっと分かりません。
MacOSX 付属のものは -I (大文字のアイ)のかわりに -l (小文字のエル)を使う。(OS10.2 以前) OS10.3 では aclocal, autoconf は標準でついてきます。 aclocal はデフォルトで /usr/share/aclocal を見に行くので、Gauche の configure で --prefix=/usr とかやらない限り gauche.m4 を見つけてくれません。 -I オプションで幸せになれます。 なお autoconf, aclocal は CVS 上の最新版を追いかけたり、 Gauche の拡張ライブラリを開発したりする人が使うツールです。 普通にインストールして使うぶんにはそれがどうなってようが全く影響ありません。 ご安心ください。
MacOSX 付属のもののバージョンは 1.57 でオプションが微妙に違う。 texi2html -number -menu -split_node gauche-refj.texi とやるとウェブ版と近い出力になる。
Fink Project の dlcompat ライブラリを使う。(OS10.2 以前) dlcompat は OpenDarwin のプロジェクトに移動しました。ライセンスはBSDラインセンス近似となります。 OS10.3 からは標準でこのライブラリがついてくるようになり特に何もしなくてもよくなりました。
ウインドウを開くプログラムはアプリケーション形式 *.app にしないとキーボード入力ができなかったり、うれしく無い。 正式なやり方ではないとおもうけど、一例
FinkのGtkを使うと動く。でも、フォントが変更できなくて、漢字を見えない。Finkの問題でしょうか。
FinkのSDLコンパイルするが、セグメンテーションフォルトが出る。まだネイティブのSDLでコンパイルできません。
あとは普通に ./configure && make でオッケイです。 iconv と gdbm はまだ試してません。
fink で gdbm と iconv を install して
./configure --with-local=/sw --with-rpath=/sw/lib --with-iconv=/sw --enable-multibyte=sjis make
で、iconv と gdbm が使えています。 -- nel
どうも、dlcompatの新しいやつでは、拡張ライブラリのロードに失敗する ようです。Cのシンボル名の頭に '_' をつけるかつけないかに違いがあるみたい。 src/load.c 中の "_Scm_Init_" という定数の頭の'_' を取って下さい。 この問題は0.7では修正されます。(2003/05/25 14:44:26 PDT)