mysql-ruby
- MySQL Ruby Module ver2.4.2-1 for windows binaries RAA:mysql-ruby-win
- 作り方
- リンク
- 履歴
- コメント、ぷりぃず
- 暗黒の心霊写真 - 篠澤直子 (2010-01-11 (月) 04:23:39)
- Windows + Ruby - HN (2003-09-13 (土) 19:52:09)
MySQL Ruby Module ver2.4.2-1 for windows binaries RAA:mysql-ruby-win
※ 自分への 1.8対応のプレッシャーということで
これは MySQL の Ruby API である MySQL の Windows環境でのバイナリです。 cygwin版と、mingw32版、mswin32版があります。 rubyのバージョンは、1.6.6です。 ruby test.rb のテストはすべて通ってます。 確認したサーバは、
Linux 3.23.41 WinNT4WS 3.23.38-nt(同じマシン)
です。
インストール
% ruby install.rb -n
で、インタプリタを自動認識して、インストール先が表示されます。(たぶん)
ex.
install
mingw32/mysql.so => e:/usr/local/mingw/lib/ruby/site_ruby/1.6/i686-mingw32
Config::CONFIGを利用してますので、rbconfig.rbが正常にインストールされている必要があります。バイナリ配布なパッケージで確認したのは、うささんのMSWin32配布パッケージ http://ftp.ruby-lang.org/pub/ruby/binaries/mswin32/ ruby-1.6.6-i586-mswin32.zip だけでした。
ActiveRuby? や Apollo 利用な方は、適当なディレクトリにコピーしてください。
(see. ruby -e 'p $:' )
originalfiles/test.rb の先頭を読んで、サーバとの接続テストをしてください。 後は、お好きに (^^;
作り方
Cygwin版
Cygwin-1.3.9 にて、mysql-3.23.47 の client のみをコンパイル。 zlib をスタティックにリンクするため、zlib-1.1.3 をソースから コンパイルしてlibzstatic.a として利用。upx かけてます。
mysql-ruby-2.4.2 における変更点は extconf.rbの修正
$ cat extconf.rb
require 'mkmf'
have_library('zstatic')
inc, lib = dir_config('mysql', '/usr/local')
find_library('mysqlclient', 'mysql_query', lib, "#{lib}/mysql") or exit 1
# If you have error such as 'undefined symbol', delete '#' mark follow
# lines:
#have_library('m')
#have_library('z')
have_header('mysql.h') or have_header('mysql/mysql.h') or exit 1
create_makefile("mysql")
mingw32版
libmysqlclient MinGW port http://www.johnydog.cz/projects.php にあった、 MySQL 3.23.43 mingw Source を利用。
ちょっとだけ修正。 (クロス対応じゃなくするのと、STDCALLの問題回避)
#
--- Makefile.org Thu Oct 4 01:52:38 2001
+++ Makefile Wed Jan 23 21:59:39 2002
@@ -14,18 +14,18 @@
# team. Please see http://www.mysql.com in that case.
#
-CROSS_DIR = /usr/local/cross-tools/i386-mingw32msvc
-CFLAGS = -O2 -Wall
+CROSS_DIR = /usr/local/mingw
+CFLAGS = -Os -Wall
LIBS =
INCLUDES = -I./include
INSTALL_INCLUDES = $(CROSS_DIR)/include/mysql/
INSTALL_LIBS = $(CROSS_DIR)/lib/
-CC = $(CROSS_DIR)/bin/gcc
-RANLIB = $(CROSS_DIR)/bin/ranlib
-AR = $(CROSS_DIR)/bin/ar
-ARFLAGS = cr
+CC = gcc -bmingw #$(CROSS_DIR)/bin/gcc
+#RANLIB = $(CROSS_DIR)/bin/ranlib
+#AR = $(CROSS_DIR)/bin/ar
+ARFLAGS = cru
RM = rm -f
CP = cp
MV = mv
@@ -83,4 +83,4 @@
clean:
rm -f $(OBJECTS) libmysqlclient.a
-
\ No newline at end of file
+
--- include/mysql.h-orig Thu Oct 18 01:24:52 2001
+++ include/mysql.h Wed Jan 23 21:03:18 2002
@@ -48,6 +48,10 @@
#else
#define STDCALL __stdcall
#endif
+#if !defined(__MINGW32__)
+#define STDCALL
+#endif
+
typedef char * gptr;
#ifndef ST_USED_MEM_DEFINED
Ruby MySQLでは、標準の extconf.rb では libmysqlclient のリンクが解決されないので書き換えた。wsock32 と、zlib も追加。
$ cat extconf.rb
require 'mkmf'
inc, lib = dir_config('mysql', '/usr/local')
have_library('z')
have_library('wsock32')
# find_library('mysqlclient', 'mysql_query', lib, "#{lib}/mysql") or exit 1
have_library('mysqlclient')
# If you have error such as 'undefined symbol', delete '#' mark follow
# lines:
#have_library('m')
have_header('mysql.h') or have_header('mysql/mysql.h') or exit 1
create_makefile("mysql")
mswin32版
http://www.sfc.keio.ac.jp/~s01397ms/d/?date=20020201#p06 を見て思い出した。
http://ftp.ruby-lang.org/pub/ruby/binaries/mswin32/ の mswin32-ruby16.lib を適当にコピーして、mingw32版の Makefile の $(LDSHARED)行の、-lmingw32-ruby16 を -lmswin32-ruby16 に変更しただけです :-)
ruby -i.bak -pe 'sub(/mingw32-/, "mswin32-")' Makefile くらい
ちゃんと、テストは通ってます。
http://blade.nagaokaut.ac.jp/cgi-bin/vframe.rb/ruby/ruby-list/33461?33335-33630 に、試行錯誤がつづられてます。
リンク
暗黒の心霊写真 - 篠澤直子 (2010-01-11 (月) 04:23:39)
暗黒の心霊写真集で恐怖増殖中! http://candice.h.fc2.com/ (comment plugin is disabled).
Keyword(s):
References: