任务单 #8746

MinGW32 でコンパイルに失敗する
开放日期: 2006-08-02 07:28 最后更新: 2006-09-24 23:28

报告人:
属主:
类型:
状态:
关闭
组件:
(无)
里程碑:
(无)
优先:
5 - Medium
严重性:
5 - Medium
处理结果:
Fixed
文件:

Details

MinGW32 でコンパイルに失敗します。

まず、sleep がないと言われます。windows.h に Sleep が
あるようなので、MinGW32 の場合はそちらを使うのは一案で
しょう。skf_sleep が定義しっぱなしだったので使ってみる
場合は以下の通り

diff -u -r1.15 skf_fileio.c
--- skf_fileio.c 23 Jul 2006 06:06:16 -
0000 1.15
+++ skf_fileio.c 1 Aug 2006 21:41:05 -0000
@@ -43,7 +43,12 @@

#include "skf.h"
#include "skf_fileio.h"
+#if defined(__MINGW32__)
+#include <windows.h>
+#define skf_sleep Sleep
+#else
#define skf_sleep sleep
+#endif

int hold_size = 0;

@@ -156,7 +161,7 @@
if (errno != EAGAIN) {
return(sEOF);
} else {
- sleep(1); /* do not exhaust CPU
time */
+ skf_sleep(1); /* do not exhaust CPU
time */
};
};
skf_fpntr = 0;

次に Ruby Extension のコンパイルで、time 関連の再定義
を怒られます。思うに、extension では include する必要
がないかと。
diff -u -r1.9 skf_convert.i
--- skf_convert.i 19 Jul 2006 13:02:47 -
0000 1.9
+++ skf_convert.i 1 Aug 2006 22:15:05 -0000
@@ -48,7 +48,6 @@

#include <unistd.h>
#include <errno.h>
-#include <sys/time.h>

#ifdef HAVE_STRING_H
#include <string.h>

また、ruby 関連ファイルの位置が意図した場所にない場合
に弱いように感じます。extconf.rb を使えば複雑なことは
ないのですが、使わない場合は以下の通り。

まず、find-ruby が手元の find.exe は find hoge\nfuga
を正しく処理できませんでした。どうせ ruby を叩くのです
から、ruby に聞いたほうが早いでしょうまた、libruby の
位置(というか呼び出し方)も ruby に聞けば楽です。今
は LIBSTDRUBY と RUBYLIBを併用していますが、これも統合
可能かと。以上の変更を施した場合は以下の通り。

diff -u -r1.25 Makefile.in
--- Makefile.in 29 Jul 2006 06:09:44 -0000 1.25
+++ Makefile.in 1 Aug 2006 22:18:16 -0000
@@ -209,10 +209,9 @@
# srcdir
#
SRCDIR = .
-LIBSTDRUBY = @llibruby@
LIBSTDPERL = @llibperl@
PERLLIB = @perl_extlib@
-RUBYLIB = @ruby_extlib@
+LIBRUBYARG = @llibruby@
POS_INDEP_FLAG = @config_pos_indep@

#LINTOPT = -s -Aa
@@ -414,7 +413,7 @@
_rubyext: swigdef _rubyswigglue $(INCLUDES)
$(DYN_SRCS) $(GENSRCS) $(OBJS)

$(CC) -I$(RUBY_INCLUDE_DIR)
$(CFLAGS) -c $(SWIGGSRC) -o $(SWIGGO
BJ)
$(LINK) -shared $(LDFLAGS) -
L$(RUBY_INCLUDE_DIR) \
- $(OBJS) $(LIBS) $(LIBSTDRUBY)
$(SWIGGOBJ) \
+ $(OBJS) $(LIBS) $(SWIGGOBJ) \
-o $(RUBYEXT) $(LIBRUBYARG)

linttest: $(INCLUDES) $(GENSRCS) uni_table.c
in_code_table.h


diff -u -r1.15 configure.ac
--- configure.ac 29 Jul 2006 06:09:44 -
0000 1.15
+++ configure.ac 1 Aug 2006 22:18:16 -0000
@@ -81,8 +81,6 @@
AC_MSG_CHECKING([if we are building on cygwin])
AC_MSG_RESULT($CYGWIN)
if test "$CYGWIN" = "yes"; then
- ruby_extlib="/lib/libruby.dll.a"
- AC_SUBST(ruby_extlib)
config_pos_indep=""
fi
AC_SUBST(config_pos_indep)
@@ -112,9 +110,9 @@
AC_CHECK_PROGS(SWIG, swig, :)
AC_CHECK_PROGS(RUBY, ruby, false)
if test "$ruby" != "false"; then
- ruby_headers_dir=`scripts/find-ruby`
+ ruby_headers_dir=`ruby -rrbconfig -e'puts
Config::CONFIG.fetch("archdir")'`
AC_SUBST(ruby_headers_dir)
- AC_CHECK_LIB(ruby,main,llibruby="-lruby")
+ llibruby=`ruby -rrbconfig -e'puts
Config::CONFIG.fetch("LIBRUBYARG")'`
AC_SUBST(llibruby)
ruby_binary="skf.so"
if test "$CYGWIN" = "yes"; then

任务单历史 (3/10 Histories)

2006-08-03 22:53 Updated by: efialtes
  • 属主 Update from (无) to efialtes
2006-08-20 18:54 Updated by: efialtes
评论
Logged In: YES
user_id=3309

1.94b1c で一応取り込みました。
(1) これ以外に MinGW on cygwin で stat.h で転ける、setbuffer
がないと言われる、の二件を修正。
(2) LIBRUBYARG は Mac OS X 1.3.x(Ruby 1.6) でアヤシゲな結果を
返したので、取り敢えず黙らせる。この関係で LIBSTDRUBY と
RUBYLIB の統合は取りやめ。

2006-08-22 20:35 Updated by: naruse
评论
Logged In: YES
user_id=3487

取り込み有難うございます。
で、書き忘れたのですが、MinGW32では、
-o skf.so -lmsvcrt-ruby19
という順序、つまり、RUBYLIB に -lmsvcrt-ruby19 を
入れないといけないようです。
手元ではMakefileを直接いじるとコンパイルは通るようになりま
した。
2006-08-23 17:08 Updated by: naruse
评论
Logged In: YES
user_id=3487

configure.ac v1.22 で、Cygwin/MinGW32 ならばenable-mingwは
yesになりえますが、MSYS/MinGW32の場合は通常常にnoだと思いま
す。
また、Cygwinでruby_extlib="/lib/libruby.dll.a"はパスが決め
うちな点と、MinGWで-lmsvcrt-ruby19とバージョンが決めうちな
点 (ruby 1.8だとlmsvcrt-ruby18) は=`ruby -rrbconfig -
e'puts Config::CONFIG.fetch("LIBRUBYARG")'`の結果を使った方
がよいかと。
あと、Mac OS X で ruby 1.6 なものは切ってしまってよいかと。
1.8と1.9だけサポートすれば問題ないと思います。(1.6はもうメ
ンテナンスされていないので)
2006-09-01 00:18 Updated by: efialtes
评论
Logged In: YES
user_id=3309

環境依存でまるで動かないというか……
とりあえず Ruby forge の One-Click Ruby Installer を入れた環境
だと、-lmsvcrt-ruby18 は全然うごかない模様です。直接ライブラリ
名をフルパスで指定して足し込まないと駄目の模様。b1i で再度直し
ます (そういう風に)。MinGW って全然使ってない環境なので、どう
するのが妥当なのかすら判然としない。

MacOS の Ruby 1.6 は現役なので当面切れません。
2006-09-02 22:25 Updated by: naruse
评论
Logged In: YES
user_id=3487

configure.ac の 174 行目と 192 行目で flags をとっています
が、
まず、192 行目は perl がないのに perl を使っているのでバグ
かと。
また、ruby と perl で要求される flags がことなる場合を考え
ると、
両者別々に取ったほうがいい気がします。
2006-09-23 12:33 Updated by: efialtes
  • 处理结果 Update from to Fixed
2006-09-24 23:28 Updated by: efialtes
  • Ticket Close date is changed to 2006-09-24 23:28
  • 状态 Update from 开启 to 关闭
2006-09-24 23:28 Updated by: efialtes
  • Ticket Close date is changed to 2006-09-24 23:28
2006-09-24 23:28 Updated by: efialtes
  • Ticket Close date is changed to 2006-09-24 23:28

Attachment File List

No attachments

编辑

You are not logged in. I you are not logged in, your comment will be treated as an anonymous post. » 登录名