まつもと ゆきひろです
In message "[ruby-list:3676] MSVC compile error"
on 97/08/13, toyofuku / juice.or.jp <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が定義されているものは外す
ことでコンパイルできるようになるものが多いと思います.なかに
は対応が不十分なものもあると思いますが,それは指摘して下さい.
まつもと ゆきひろ /:|)