From: sh@... Date: 2010-03-19T20:04:46+09:00 Subject: [ruby-dev:40713] Re: [ruby-cvs:33760] Ruby:r26545 (trunk): Wed Feb 3 10:12:09 2010 Aaron Patterson こんばんは sheepman です。 一つ言い忘れていました。コンパイルが通らなかったので、 closure.c に以下のように無理矢理定数 USE_NEW_CLOSURE_API を定義しました。 それでは。 $ git diff closure.c diff --git a/ext/dl/closure.c b/ext/dl/closure.c index b08169d..3fd8493 100644 --- a/ext/dl/closure.c +++ b/ext/dl/closure.c @@ -5,6 +5,8 @@ #include #include "dl.h" +#define USE_NEW_CLOSURE_API 1 + #ifndef USE_NEW_CLOSURE_API #include #endif 2010年3月19日19:54 : > こんばんは sheepman です。 > > http://code.google.com/p/libffi-msvc/ から入手したコードで > Windows 7 Pro 64bit 上で VS2008 を使ってビルドする事が出来ました。.libs フォルダに ffi-3.lib が出来ました。 > > また、https://github.com/tenderlove/ruby/tree/ffi から入手した ruby1.9 のソースの > ext/dl に ffi-3.lib を ffi.lib に名前を変えて置いて、ffi.hとffitarget.hも置いて > extconf.rb を実行して nmake したら dl.so がビルド出来ました。 > > > また x64-mswin64 版の ruby1.9 に対しても x86_64 な ffi.lib と dl.so をビルドできる事を確認しました。 > > テストを実行した結果を下に載せておきます。x86_64版はテストを実行すると test/dl/test_dl2.rb の > test_strcpy で落ちます。test_strcpy をコメントアウトした結果を載せておきます。 > > 何かほかに確認する事はありますか。 > > それでは。 > > c:\work\ruby-ffi\ruby\ext\dl>cl > Microsoft(R) 32-bit C/C++ Optimizing Compiler Version 15.00.21022.08 for 80x86 > Copyright (C) Microsoft Corporation. All rights reserved. > > c:\work\ruby-ffi\ruby\ext\dl>c:\usr\local\bin\ruby -v -I. -rdl -e 'p > DL::Closure' > ruby 1.9.2dev (2010-03-19) [i386-mswin32_90] > DL::Closure > > c:\work\ruby-ffi\ruby\ext\dl>c:\usr\local\bin\ruby -I. -Ilib -r./dl.so > -r..\..\test\dl\test_base.rb > ..\..\test/runner.rb ..\..\test/dl > Loaded suite ../../test/runner > Started > .............................F...............F...............................E...EE..........E...... > .................E.. > Finished in 0.049003 seconds. > > 1) Failure: > test_to_ptr_io(DL::TestCPtr) [c:/work/ruby-ffi/ruby/test/dl/test_cptr.rb:88]: > <"require_r"> expected but was > <"">. > > 2) Failure: > test_char(DL::TestClosure) [c:/work/ruby-ffi/ruby/test/dl/test_closure.rb:100]: > <60> expected but was > <2684476>. > > 3) Error: > test_sinf(DL::TestFunc): > DL::DLError: unknown symbol "sinf" > c:/work/ruby-ffi/ruby/test/dl/test_func.rb:25:in `[]' > c:/work/ruby-ffi/ruby/test/dl/test_func.rb:25:in `test_sinf' > > 4) Error: > test_DEFAULT(DL::TestHandle): > DL::DLError: unknown symbol "malloc" > c:/work/ruby-ffi/ruby/test/dl/test_handle.rb:160:in `[]' > c:/work/ruby-ffi/ruby/test/dl/test_handle.rb:160:in `test_DEFAULT' > > 5) Error: > test_NEXT(DL::TestHandle): > DL::DLError: unknown symbol "Init_objspace" > c:/work/ruby-ffi/ruby/test/dl/test_handle.rb:154:in `[]' > c:/work/ruby-ffi/ruby/test/dl/test_handle.rb:154:in `rescue in test_NEXT' > c:/work/ruby-ffi/ruby/test/dl/test_handle.rb:127:in `test_NEXT' > > 6) Error: > test_static_sym(DL::TestHandle): > DL::DLError: unknown symbol "dlopen" > c:/work/ruby-ffi/ruby/test/dl/test_handle.rb:25:in `sym' > c:/work/ruby-ffi/ruby/test/dl/test_handle.rb:25:in `test_static_sym' > > 7) Error: > test_method_call(DL::TestMethod): > DL::DLError: unknown symbol "sinf" > c:/work/ruby-ffi/ruby/test/dl/test_method.rb:7:in `[]' > c:/work/ruby-ffi/ruby/test/dl/test_method.rb:7:in `test_method_call' > > 120 tests, 204 assertions, 2 failures, 5 errors, 0 skips > > c:\work\ruby-ffi\ruby\ext\dl> > > c:\work\ruby-ffi\ruby\ext\dl>c:\usr\local\ruby19x64\bin\ruby -v -I. > -rdl -e 'p DL::Closure' > ruby 1.9.2dev (2010-03-19) [x64-mswin64_90] > DL::Closure > > c:\work\ruby-ffi\ruby\ext\dl>c:\usr\local\ruby19x64\bin\ruby -I. -Ilib > -r./dl.so -r..\..\test\dl\test_base.rb ..\..\test/runner.rb > ..\..\test/dl > Loaded suite ../../test/runner > Started > ...........F.................F............................F.....................EE..........E...... > ............E.E...E > Finished in 0.051003 seconds. > > 1) Failure: > test_to_s(DL::TestCFunc) [c:/work/ruby-ffi/ruby/test/dl/test_cfunc.rb:53]: > Expected /ptr=0x749ee400/ to be === "# ptr=0x000000749ee400 type=1 name= > strcpy'>". > > 2) Failure: > test_to_ptr_io(DL::TestCPtr) [c:/work/ruby-ffi/ruby/test/dl/test_cptr.rb:88]: > <"require_r"> expected but was > <"">. > > 3) Failure: > test_callback(DL::TestDL) [c:/work/ruby-ffi/ruby/test/dl/test_dl2.rb:138]: > <"aabbfoorz"> expected but was > <"foobarbaz">. > > 4) Error: > test_DEFAULT(DL::TestHandle): > DL::DLError: unknown symbol "malloc" > c:/work/ruby-ffi/ruby/test/dl/test_handle.rb:160:in `[]' > c:/work/ruby-ffi/ruby/test/dl/test_handle.rb:160:in `test_DEFAULT' > > 5) Error: > test_NEXT(DL::TestHandle): > DL::DLError: unknown symbol "Init_objspace" > c:/work/ruby-ffi/ruby/test/dl/test_handle.rb:154:in `[]' > c:/work/ruby-ffi/ruby/test/dl/test_handle.rb:154:in `rescue in test_NEXT' > c:/work/ruby-ffi/ruby/test/dl/test_handle.rb:127:in `test_NEXT' > > 6) Error: > test_static_sym(DL::TestHandle): > DL::DLError: unknown symbol "dlopen" > c:/work/ruby-ffi/ruby/test/dl/test_handle.rb:25:in `sym' > c:/work/ruby-ffi/ruby/test/dl/test_handle.rb:25:in `test_static_sym' > > 7) Error: > test_struct(DL::TestImport): > RuntimeError: sizeof(void*)? > c:/work/ruby-ffi/ruby/ext/dl/lib/dl/pack.rb:85:in `pack' > c:/work/ruby-ffi/ruby/ext/dl/lib/dl/struct.rb:157:in `[]=' > c:/work/ruby-ffi/ruby/ext/dl/lib/dl/struct.rb:28:in `block (3 > levels) in create' > c:/work/ruby-ffi/ruby/test/dl/test_import.rb:97:in `test_struct' > > 8) Error: > test_value(DL::TestImport): > RuntimeError: sizeof(void*)? > c:/work/ruby-ffi/ruby/ext/dl/lib/dl/pack.rb:85:in `pack' > c:/work/ruby-ffi/ruby/ext/dl/lib/dl/struct.rb:157:in `[]=' > c:/work/ruby-ffi/ruby/ext/dl/lib/dl/struct.rb:28:in `block (3 > levels) in create' > c:/work/ruby-ffi/ruby/ext/dl/lib/dl/import.rb:186:in `create_value' > c:/work/ruby-ffi/ruby/test/dl/test_import.rb:76:in `test_value' > > 9) Error: > test_version(DL::TestWin32): > RuntimeError: sizeof(void*)? > c:/work/ruby-ffi/ruby/ext/dl/lib/dl/pack.rb:85:in `pack' > c:/work/ruby-ffi/ruby/ext/dl/lib/dl/struct.rb:157:in `[]=' > c:/work/ruby-ffi/ruby/ext/dl/lib/dl/struct.rb:28:in `block (3 > levels) in create' > c:/work/ruby-ffi/ruby/test/dl/test_win32.rb:28:in `get_version_ex' > c:/work/ruby-ffi/ruby/test/dl/test_win32.rb:42:in `test_version' > > 119 tests, 191 assertions, 3 failures, 6 errors, 0 skips > > > 2010年3月9日3:15 NARUSE, Yui : >> (2010/02/28 9:01), Aaron Patterson wrote: >>> 2010/2/26 NARUSE, Yui: >>>> アーロン宛です。 >>> 古いlibffiを使う時にのみ 'sys/mman.h' が必要なだけで、新しい libffi には不必要です。 >>> Visual Studioをま だ、入手していないので、良かったら、 >>> 私のフォークを(sys/mman.hを使用としない)コンパイルして貰えませんか? >>> >>> 私のフォークのリンクは下記の通りです。 >>> >>> https://github.com/tenderlove/ruby/tree/ffi >>> >>> この変更で現在のコンパイルエラーを解決出来ると思います。 >>> >>> https://github.com/tenderlove/ruby/commit/d10980da20ae210ceed30c7829a07d0d8275c7ec >>> >>> 私自身でも、Visual Studioを入手次第、テストしてみるつもりです。 >> >> 遅れましたが確認しました。 >> 確かに closure.c のコンパイルが通るようになりました。 >> >> ただし、extconf.rb 中の pkg_config("libffi") は、 >> mswin では動かないので、ここは直す必要がありましたが。 >> http://github.com/tenderlove/ruby/blob/ffi/ext/dl/extconf.rb >> >> >> で、結果ですが、わたしの作った ffi.lib が壊れているらしく、 >> この先で失敗してしまいました。 >> >> というわけで、まともな ffi.lib を作れた方試してみてください。 >> >> -- >> NARUSE, Yui >> >> > >