From: matz@... (Yukihiro Matsumoto) Date: 1997-08-14T02:05:40+09:00 Subject: [ruby-list:3678] Re: MSVC compile error まつもと ゆきひろです In message "[ruby-list:3676] MSVC compile error" on 97/08/13, toyofuku@juice.or.jp writes: | 豊福@パパイヤです。 MSVCを識別するためのマクロ名はVC32で良いですか? |・unistd.h などないファイルに対応する HAVE_UNISTD_H | などを define しないようにした。 | でも数箇所 #ifdef HAVE_... なしで include | しているところもあったのでそこはコメントアウト | した。 これはこちらのミスでしょう.コメントアウトした場所を教えて下 さい. |・R_OK, W_OK, X_OK がない | 4, 2, 1 に define した。 | |・S_ISGID, S_IXUGO がない | linux で定義されている値に define した。 | |・gid_t がない | GETGROUPS_T には short を define した。 | |・DIR がない | dir.c, glob.c がコンパイルできない。 ううう,この辺はどうすべきなんでしょう.Perlとかどうしてるの かな. |・fd_set がない | winsock.h を include した。 selectを使う場所ではwinsock.hをインクルードする必要があるよ うですね. |・eval.c に struct timeval がない | sys/time.h もないので代りに winsock.h を | include した。 | (file.c io.c process.c time.c では自前で | struct timeval が定義されている。ただし | file.c では struct が stuct になっている。) 修正します.eval.cにもio.cと同様の定義を追加します. |・OpenFile という名前が winbase.h のものとぶつかる | 名前を変えた。 そうですか.では名前を変えましょう. |・process.c の struct wail_data 定義の閉括弧の後に | セミコロンがない 修正します. |・process.c の f_wait() の中の status = data.status; | でエラー | state = data.status; にした。 修正します. |・SIGHUP, SIGQUIT がない | コメントアウトした。 #ifdef SIGHUPなどでチェックするようにしましょう. | dir.obj と glob.obj 以外をリンクしたときの |未定義関数エラーを最後につけておきます。このうち気に |なっているのは | |・ReadDataPending | READ_DATA_PENDING() 関係 これはシステムに合わせて自分で定義する必要があります.stdio のバッファに読み込まれたデータがある時真を返す関数です.MSVC で有効な定義がわかれば教えて下さい.前述の識別マクロを使って 組み込みますから. |・alloca | _alloca はあるみたい とりあえずruby.hでALLOCA_Nを_allocaを使うように変更してみて 下さい.それでだめなら,missing/alloca.cを使って下さい.その 場合,config.hに #define C_ALLOCA を追加する必要があると思います. |・select@20 | winsock.h で PASCAL FAR select(...) selectを使っている全部のファイルでwinsock.hをインクルードす れば良いのでしょうか? |・strcasecmp | 標準関数なんですか? 確かそのはずなんですけど.簡単に定義できますから,missingに 追加しておくようにしましょう. | これら以外の関数はどのライブラリをリンクすれば |よいでしょうか。 | | |未定義関数一覧 | | ReadDataPending | S_ISBLK | S_ISFIFO | __WSAFDIsSet@8 | _wait | alloca | chown | crypt | fchmod | fchown | fcntl | flock | fork | ftruncate | getegid | geteuid | getgid | getgroups | getpgrp | getppid | gettimeofday | getuid | ioctl | kill | link | lstat | pipe | random | readlink | select@20 | setegid | setenv | seteuid | setpgrp | setregid | setreuid | sigblock | sigmask | sigsetmask | sleep | strcasecmp | symlink | syscall | truncate | utimes | vfork | wait これらのうち,config.hでHAVE_XXXXが定義されているものは外す ことでコンパイルできるようになるものが多いと思います.なかに は対応が不十分なものもあると思いますが,それは指摘して下さい. まつもと ゆきひろ /:|)