豊福@パパイヤです。
Ruby Jed を Windows95 の MSVC でコンパイルして
みました。MSVC用の config.h をどうすればよいか
わからなかったので、Linux用の config.h をその
まま使ってエラーが出るたび変更していきました。
コンパイルオプションは Jed についてくる PC用の
次のものを使いました。
/nologo /W3 /YX /O2 /D "NDEBUG" /D _X86_
/D "_WINDOWS" /D "__WIN32__" /D "mswindows"
/D "msdos" /D "VC32" /D "MSWINDOWS" /D "pc_system"
/I "." /D "FLOAT_TYPE" /ML
ruby のバージョンは 1.0-970701 です。
以下コンパイルを通すために行なった主な項目です。
間違いやもっとよい方法があったら教えて下さい。
・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 がコンパイルできない。
・fd_set がない
winsock.h を include した。
・eval.c に struct timeval がない
sys/time.h もないので代りに winsock.h を
include した。
(file.c io.c process.c time.c では自前で
struct timeval が定義されている。ただし
file.c では struct が stuct になっている。)
・OpenFile という名前が winbase.h のものとぶつかる
名前を変えた。
・process.c の struct wail_data 定義の閉括弧の後に
セミコロンがない
・process.c の f_wait() の中の status = data.status;
でエラー
state = data.status; にした。
・SIGHUP, SIGQUIT がない
コメントアウトした。
などやって取りあえず dir.c と glob.c 以外は .obj
ができました。
dir.obj と glob.obj 以外をリンクしたときの
未定義関数エラーを最後につけておきます。このうち気に
なっているのは
・ReadDataPending
READ_DATA_PENDING() 関係
・__WSAFDIsSet@8
winsock.h の FD_ISSET() 関係
・alloca
_alloca はあるみたい
・select@20
winsock.h で PASCAL FAR select(...)
・strcasecmp
標準関数なんですか?
です。
これら以外の関数はどのライブラリをリンクすれば
よいでしょうか。
未定義関数一覧
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
---
豊福@パパイヤ
unbound / papaya.juice.or.jp
toyofuku / juice.or.jp