2015-01-15 56 views
4

在Windows 7 x86上使用Ruby安裝OpenSSL for eventmachine。
我想在Windows 7 x86 SP1上安裝eventmachine gem。
我已經安裝rubyinstaller-2.1.5.exehttp://rubyinstaller.org/downloads/
我也安裝了DevKit-mingw64-32-4.7.2-20130224-1151-sfx.exe在Windows 7 x86上使用Ruby安裝OpenSSL for eventmachine x86

我運行命令:

gem install eventmachine --platform=ruby 

至於現在這是使用eventmachine-1.0.4

我得到了以下控制檯輸出:

Temporarily enhancing PATH to include DevKit... 
    Building native extensions. This could take a while... 
    ERROR: Error installing eventmachine: 
      ERROR: Failed to build gem native extension. 

     C:/Ruby21/bin/ruby.exe extconf.rb 
    checking for main() in -lssl... no 
    checking for rb_trap_immediate in ruby.h,rubysig.h... no 
    checking for rb_thread_blocking_region()... yes 
    checking for ruby/thread.h... yes 
    checking for rb_thread_call_without_gvl() in ruby/thread.h... yes 
    checking for inotify_init() in sys/inotify.h... no 
    checking for __NR_inotify_init in sys/syscall.h... *** extconf.rb failed *** 
    Could not create Makefile due to some reason, probably lack of necessary 
    libraries and/or headers. Check the mkmf.log file for more details. You may 
    need configuration options. 

    Provided configuration options: 
      --with-opt-dir 
      --without-opt-dir 
      --with-opt-include 
      --without-opt-include=${opt-dir}/include 
      --with-opt-lib 
      --without-opt-lib=${opt-dir}/lib 
      --with-make-prog 
      --without-make-prog 
      --srcdir=. 
      --curdir 
      --ruby=C:/Ruby21/bin/ruby 
      --with-openssl-config 
      --without-openssl-config 
      --with-pkg-config 
      --without-pkg-config 
      --with-ssl-dir 
      --without-ssl-dir 
      --with-ssl-include 
      --without-ssl-include=${ssl-dir}/include 
      --with-ssl-lib 
      --without-ssl-lib=${ssl-dir}/lib 
      --with-ssllib 
      --without-ssllib 
    C:/Ruby21/lib/ruby/2.1.0/mkmf.rb:395:in `system': Invalid argument - ruby_setenv(LOGONSERVER) (Errno::EINVAL) 
      from C:/Ruby21/lib/ruby/2.1.0/mkmf.rb:395:in `block in xsystem' 
      from C:/Ruby21/lib/ruby/2.1.0/mkmf.rb:321:in `open' 
      from C:/Ruby21/lib/ruby/2.1.0/mkmf.rb:385:in `xsystem' 
      from C:/Ruby21/lib/ruby/2.1.0/mkmf.rb:463:in `try_do' 
      from C:/Ruby21/lib/ruby/2.1.0/mkmf.rb:571:in `block in try_compile' 
      from C:/Ruby21/lib/ruby/2.1.0/mkmf.rb:524:in `with_werror' 
      from C:/Ruby21/lib/ruby/2.1.0/mkmf.rb:571:in `try_compile' 
      from C:/Ruby21/lib/ruby/2.1.0/mkmf.rb:811:in `macro_defined?' 
      from C:/Ruby21/lib/ruby/2.1.0/mkmf.rb:950:in `block in have_macro' 
      from C:/Ruby21/lib/ruby/2.1.0/mkmf.rb:918:in `block in checking_for' 
      from C:/Ruby21/lib/ruby/2.1.0/mkmf.rb:351:in `block (2 levels) in postpone' 
      from C:/Ruby21/lib/ruby/2.1.0/mkmf.rb:321:in `open' 
      from C:/Ruby21/lib/ruby/2.1.0/mkmf.rb:351:in `block in postpone' 
      from C:/Ruby21/lib/ruby/2.1.0/mkmf.rb:321:in `open' 
      from C:/Ruby21/lib/ruby/2.1.0/mkmf.rb:347:in `postpone' 
      from C:/Ruby21/lib/ruby/2.1.0/mkmf.rb:917:in `checking_for' 
      from C:/Ruby21/lib/ruby/2.1.0/mkmf.rb:949:in `have_macro' 
      from extconf.rb:72:in `<main>' 

    extconf failed, exit code 1 

    Gem files will remain installed in C:/Ruby21/lib/ruby/gems/2.1.0/gems/eventmachine-1.0.4 for inspection. 
    Results logged to C:/Ruby21/lib/ruby/gems/2.1.0/extensions/x86-mingw32/2.1.0/eventmachine-1.0.4/gem_make.out 

文件C:\Ruby21\lib\ruby\gems\2.1.0\extensions\x86-mingw32\2.1.0\eventmachine-1.0.4\mkmf.log如下:

package configuration for openssl is not found 
    have_library: checking for main() in -lssl... -------------------- no 

    "gcc -o conftest.exe -IC:/Ruby21/include/ruby-2.1.0/i386-mingw32 -IC:/Ruby21/include/ruby-2.1.0/ruby/backward -IC:/Ruby21/include/ruby-2.1.0 -I. -DFD_SETSIZE=2048 -D_WIN32_WINNT=0x0501 -D__MINGW_USE_VC2005_COMPAT -D_FILE_OFFSET_BITS=64 -O3 -fno-omit-frame-pointer -fno-fast-math -g -Wall -Wextra -Wno-unused-parameter -Wno-parentheses -Wno-long-long -Wno-missing-field-initializers -Wunused-variable -Wpointer-arith -Wwrite-strings -Wdeclaration-after-statement -Wimplicit-function-declaration conftest.c -L. -LC:/Ruby21/lib -L.  -lmsvcrt-ruby210 -lshell32 -lws2_32 -liphlpapi -limagehlp -lshlwapi " 
    checked program was: 
    /* begin */ 
    1: #include "ruby.h" 
    2: 
    3: #include <winsock2.h> 
    4: #include <windows.h> 
    5: int main(int argc, char **argv) 
    6: { 
    7: return 0; 
    8: } 
    /* end */ 

    "gcc -o conftest.exe -IC:/Ruby21/include/ruby-2.1.0/i386-mingw32 -IC:/Ruby21/include/ruby-2.1.0/ruby/backward -IC:/Ruby21/include/ruby-2.1.0 -I. -DFD_SETSIZE=2048 -D_WIN32_WINNT=0x0501 -D__MINGW_USE_VC2005_COMPAT -D_FILE_OFFSET_BITS=64 -O3 -fno-omit-frame-pointer -fno-fast-math -g -Wall -Wextra -Wno-unused-parameter -Wno-parentheses -Wno-long-long -Wno-missing-field-initializers -Wunused-variable -Wpointer-arith -Wwrite-strings -Wdeclaration-after-statement -Wimplicit-function-declaration conftest.c -L. -LC:/Ruby21/lib -L.  -lmsvcrt-ruby210 -lssl -lshell32 -lws2_32 -liphlpapi -limagehlp -lshlwapi " 
    conftest.c: In function 't': 
    conftest.c:16:32: warning: variable 'p' set but not used [-Wunused-but-set-variable] 
    c:/rubydevkit/mingw/bin/../lib/gcc/i686-w64-mingw32/4.7.2/../../../../i686-w64-mingw32/bin/ld.exe: cannot find -lssl 
    collect2.exe: error: ld returned 1 exit status 
    checked program was: 
    /* begin */ 
    1: #include "ruby.h" 
    2: 
    3: #include <winsock2.h> 
    4: #include <windows.h> 
    5: 
    6: /*top*/ 
    7: extern int t(void); 
    8: int main(int argc, char **argv) 
    9: { 
    10: if (argc > 1000000) { 
    11:  printf("%p", &t); 
    12: } 
    13: 
    14: return 0; 
    15: } 
    16: int t(void) { void ((*volatile p)()); p = (void ((*)()))main; return 0; } 
    /* end */ 

    "gcc -o conftest.exe -IC:/Ruby21/include/ruby-2.1.0/i386-mingw32 -IC:/Ruby21/include/ruby-2.1.0/ruby/backward -IC:/Ruby21/include/ruby-2.1.0 -I. -DFD_SETSIZE=2048 -D_WIN32_WINNT=0x0501 -D__MINGW_USE_VC2005_COMPAT -D_FILE_OFFSET_BITS=64 -O3 -fno-omit-frame-pointer -fno-fast-math -g -Wall -Wextra -Wno-unused-parameter -Wno-parentheses -Wno-long-long -Wno-missing-field-initializers -Wunused-variable -Wpointer-arith -Wwrite-strings -Wdeclaration-after-statement -Wimplicit-function-declaration conftest.c -L. -LC:/Ruby21/lib -L.  -lmsvcrt-ruby210 -lssl -lshell32 -lws2_32 -liphlpapi -limagehlp -lshlwapi " 
    conftest.c: In function 't': 
    conftest.c:16:1: error: too few arguments to function 'main' 
    conftest.c:8:5: note: declared here 
    checked program was: 
    /* begin */ 
    1: #include "ruby.h" 
    2: 
    3: #include <winsock2.h> 
    4: #include <windows.h> 
    5: 
    6: /*top*/ 
    7: extern int t(void); 
    8: int main(int argc, char **argv) 
    9: { 
    10: if (argc > 1000000) { 
    11:  printf("%p", &t); 
    12: } 
    13: 
    14: return 0; 
    15: } 
    16: int t(void) { main(); return 0; } 
    /* end */ 

    -------------------- 

    have_var: checking for rb_trap_immediate in ruby.h,rubysig.h... -------------------- no 

    "gcc -IC:/Ruby21/include/ruby-2.1.0/i386-mingw32 -IC:/Ruby21/include/ruby-2.1.0/ruby/backward -IC:/Ruby21/include/ruby-2.1.0 -I. -DFD_SETSIZE=2048 -D_WIN32_WINNT=0x0501 -D__MINGW_USE_VC2005_COMPAT -D_FILE_OFFSET_BITS=64 -O3 -fno-omit-frame-pointer -fno-fast-math -g -Wall -Wextra -Wno-unused-parameter -Wno-parentheses -Wno-long-long -Wno-missing-field-initializers -Wunused-variable -Wpointer-arith -Wwrite-strings -Wdeclaration-after-statement -Wimplicit-function-declaration -c conftest.c" 
    In file included from conftest.c:6:0: 
    C:/Ruby21/include/ruby-2.1.0/ruby/backward/rubysig.h:14:2: warning: #warning rubysig.h is obsolete [-Wcpp] 
    conftest.c: In function 't': 
    conftest.c:18:55: error: 'rb_trap_immediate' undeclared (first use in this function) 
    conftest.c:18:55: note: each undeclared identifier is reported only once for each function it appears in 
    conftest.c:18:45: warning: variable 'p' set but not used [-Wunused-but-set-variable] 
    checked program was: 
    /* begin */ 
    1: #include "ruby.h" 
    2: 
    3: #include <winsock2.h> 
    4: #include <windows.h> 
    5: #include <ruby.h> 
    6: #include <rubysig.h> 
    7: 
    8: /*top*/ 
    9: extern int t(void); 
    10: int main(int argc, char **argv) 
    11: { 
    12: if (argc > 1000000) { 
    13:  printf("%p", &t); 
    14: } 
    15: 
    16: return 0; 
    17: } 
    18: int t(void) { const volatile void *volatile p; p = &(&rb_trap_immediate)[0]; return 0; } 
    /* end */ 

    -------------------- 

    have_func: checking for rb_thread_blocking_region()... -------------------- yes 

    "gcc -o conftest.exe -IC:/Ruby21/include/ruby-2.1.0/i386-mingw32 -IC:/Ruby21/include/ruby-2.1.0/ruby/backward -IC:/Ruby21/include/ruby-2.1.0 -I. -DFD_SETSIZE=2048 -D_WIN32_WINNT=0x0501 -D__MINGW_USE_VC2005_COMPAT -D_FILE_OFFSET_BITS=64 -O3 -fno-omit-frame-pointer -fno-fast-math -g -Wall -Wextra -Wno-unused-parameter -Wno-parentheses -Wno-long-long -Wno-missing-field-initializers -Wunused-variable -Wpointer-arith -Wwrite-strings -Wdeclaration-after-statement -Wimplicit-function-declaration conftest.c -L. -LC:/Ruby21/lib -L.  -lmsvcrt-ruby210 -lshell32 -lws2_32 -liphlpapi -limagehlp -lshlwapi " 
    conftest.c: In function 't': 
    conftest.c:16:1: warning: 'rb_thread_blocking_region' is deprecated (declared at C:/Ruby21/include/ruby-2.1.0/ruby/intern.h:870) [-Wdeprecated-declarations] 
    conftest.c:16:32: warning: variable 'p' set but not used [-Wunused-but-set-variable] 
    checked program was: 
    /* begin */ 
    1: #include "ruby.h" 
    2: 
    3: #include <winsock2.h> 
    4: #include <windows.h> 
    5: 
    6: /*top*/ 
    7: extern int t(void); 
    8: int main(int argc, char **argv) 
    9: { 
    10: if (argc > 1000000) { 
    11:  printf("%p", &t); 
    12: } 
    13: 
    14: return 0; 
    15: } 
    16: int t(void) { void ((*volatile p)()); p = (void ((*)()))rb_thread_blocking_region; return 0; } 
    /* end */ 

    -------------------- 

    have_header: checking for ruby/thread.h... -------------------- yes 

    "gcc -E -IC:/Ruby21/include/ruby-2.1.0/i386-mingw32 -IC:/Ruby21/include/ruby-2.1.0/ruby/backward -IC:/Ruby21/include/ruby-2.1.0 -I. -DFD_SETSIZE=2048 -D_WIN32_WINNT=0x0501 -D__MINGW_USE_VC2005_COMPAT -D_FILE_OFFSET_BITS=64 -O3 -fno-omit-frame-pointer -fno-fast-math -g -Wall -Wextra -Wno-unused-parameter -Wno-parentheses -Wno-long-long -Wno-missing-field-initializers -Wunused-variable -Wpointer-arith -Wwrite-strings -Wdeclaration-after-statement -Wimplicit-function-declaration conftest.c -o conftest.i" 
    checked program was: 
    /* begin */ 
    1: #include "ruby.h" 
    2: 
    3: #include <winsock2.h> 
    4: #include <windows.h> 
    5: #include <ruby/thread.h> 
    /* end */ 

    -------------------- 

    have_func: checking for rb_thread_call_without_gvl() in ruby/thread.h... -------------------- yes 

    "gcc -o conftest.exe -IC:/Ruby21/include/ruby-2.1.0/i386-mingw32 -IC:/Ruby21/include/ruby-2.1.0/ruby/backward -IC:/Ruby21/include/ruby-2.1.0 -I. -DFD_SETSIZE=2048 -D_WIN32_WINNT=0x0501 -D__MINGW_USE_VC2005_COMPAT -D_FILE_OFFSET_BITS=64 -O3 -fno-omit-frame-pointer -fno-fast-math -g -Wall -Wextra -Wno-unused-parameter -Wno-parentheses -Wno-long-long -Wno-missing-field-initializers -Wunused-variable -Wpointer-arith -Wwrite-strings -Wdeclaration-after-statement -Wimplicit-function-declaration conftest.c -L. -LC:/Ruby21/lib -L.  -lmsvcrt-ruby210 -lshell32 -lws2_32 -liphlpapi -limagehlp -lshlwapi " 
    conftest.c: In function 't': 
    conftest.c:17:32: warning: variable 'p' set but not used [-Wunused-but-set-variable] 
    checked program was: 
    /* begin */ 
    1: #include "ruby.h" 
    2: 
    3: #include <winsock2.h> 
    4: #include <windows.h> 
    5: #include <ruby/thread.h> 
    6: 
    7: /*top*/ 
    8: extern int t(void); 
    9: int main(int argc, char **argv) 
    10: { 
    11: if (argc > 1000000) { 
    12:  printf("%p", &t); 
    13: } 
    14: 
    15: return 0; 
    16: } 
    17: int t(void) { void ((*volatile p)()); p = (void ((*)()))rb_thread_call_without_gvl; return 0; } 
    /* end */ 

    -------------------- 

    have_func: checking for inotify_init() in sys/inotify.h... -------------------- no 

    "gcc -o conftest.exe -IC:/Ruby21/include/ruby-2.1.0/i386-mingw32 -IC:/Ruby21/include/ruby-2.1.0/ruby/backward -IC:/Ruby21/include/ruby-2.1.0 -I. -DFD_SETSIZE=2048 -D_WIN32_WINNT=0x0501 -D__MINGW_USE_VC2005_COMPAT -D_FILE_OFFSET_BITS=64 -O3 -fno-omit-frame-pointer -fno-fast-math -g -Wall -Wextra -Wno-unused-parameter -Wno-parentheses -Wno-long-long -Wno-missing-field-initializers -Wunused-variable -Wpointer-arith -Wwrite-strings -Wdeclaration-after-statement -Wimplicit-function-declaration conftest.c -L. -LC:/Ruby21/lib -L.  -lmsvcrt-ruby210 -lshell32 -lws2_32 -liphlpapi -limagehlp -lshlwapi " 
    conftest.c:5:25: fatal error: sys/inotify.h: No such file or directory 
    compilation terminated. 
    checked program was: 
    /* begin */ 
    1: #include "ruby.h" 
    2: 
    3: #include <winsock2.h> 
    4: #include <windows.h> 
    5: #include <sys/inotify.h> 
    6: 
    7: /*top*/ 
    8: extern int t(void); 
    9: int main(int argc, char **argv) 
    10: { 
    11: if (argc > 1000000) { 
    12:  printf("%p", &t); 
    13: } 
    14: 
    15: return 0; 
    16: } 
    17: int t(void) { void ((*volatile p)()); p = (void ((*)()))inotify_init; return 0; } 
    /* end */ 

    "gcc -o conftest.exe -IC:/Ruby21/include/ruby-2.1.0/i386-mingw32 -IC:/Ruby21/include/ruby-2.1.0/ruby/backward -IC:/Ruby21/include/ruby-2.1.0 -I. -DFD_SETSIZE=2048 -D_WIN32_WINNT=0x0501 -D__MINGW_USE_VC2005_COMPAT -D_FILE_OFFSET_BITS=64 -O3 -fno-omit-frame-pointer -fno-fast-math -g -Wall -Wextra -Wno-unused-parameter -Wno-parentheses -Wno-long-long -Wno-missing-field-initializers -Wunused-variable -Wpointer-arith -Wwrite-strings -Wdeclaration-after-statement -Wimplicit-function-declaration conftest.c -L. -LC:/Ruby21/lib -L.  -lmsvcrt-ruby210 -lshell32 -lws2_32 -liphlpapi -limagehlp -lshlwapi " 
    conftest.c:5:25: fatal error: sys/inotify.h: No such file or directory 
    compilation terminated. 
    checked program was: 
    /* begin */ 
    1: #include "ruby.h" 
    2: 
    3: #include <winsock2.h> 
    4: #include <windows.h> 
    5: #include <sys/inotify.h> 
    6: 
    7: /*top*/ 
    8: extern int t(void); 
    9: int main(int argc, char **argv) 
    10: { 
    11: if (argc > 1000000) { 
    12:  printf("%p", &t); 
    13: } 
    14: 
    15: return 0; 
    16: } 
    17: int t(void) { inotify_init(); return 0; } 
    /* end */ 

    -------------------- 

    "gcc -IC:/Ruby21/include/ruby-2.1.0/i386-mingw32 -IC:/Ruby21/include/ruby-2.1.0/ruby/backward -IC:/Ruby21/include/ruby-2.1.0 -I. -DFD_SETSIZE=2048 -D_WIN32_WINNT=0x0501 -D__MINGW_USE_VC2005_COMPAT -D_FILE_OFFSET_BITS=64 -O3 -fno-omit-frame-pointer -fno-fast-math -g -Wall -Wextra -Wno-unused-parameter -Wno-parentheses -Wno-long-long -Wno-missing-field-initializers -Wunused-variable -Wpointer-arith -Wwrite-strings -Wdeclaration-after-statement -Wimplicit-function-declaration -c conftest.c" 
    checked program was: 
    /* begin */ 
    1: #include "ruby.h" 
    2: 
    3: #include <winsock2.h> 
    4: #include <windows.h> 
    5: #include <sys/syscall.h> 
    6: /*top*/ 
    7: #ifndef __NR_inotify_init 
    8: # error 
    9: |:/ === __NR_inotify_init undefined === /:| 
    10: #endif 
    /* end */ 

Accoding這個輸出我需要安裝OpenSSL的。大多數情況下,添加所需的OpenSSL支持並不能解決所有的瑕疵錯誤,但我從中開始了。我已閱讀此文章https://github.com/eventmachine/eventmachine/issues/555#issuecomment-68942305。但這個解決方案看起來很髒沒有?
我繼續閱讀此帖子https://github.com/eventmachine/eventmachine/issues/555#issuecomment-68945346,最終轉到此線程https://groups.google.com/forum/#!topic/rubyinstaller/qVBRWlHb86Y/discussion
我在那裏讀到:「如果你只是使用RubyInstaller,只提取位於bin文件夾內的包(使用7-Zip)的DLL。」
我應該在哪裏放置解壓縮的文件?我試圖把它放到C:\Ruby21\binC:\RubyDevKit\bin - 沒有任何變化。

我該如何解決這些錯誤?
非常感謝!

我嘗試了其他選擇,例如描述於Ruby: problem installing EventMachine under Windows 7

一些背景:
這是mysql2 gem(取決於eventmachine),最後是redmine,在我的情況下是必需的。
我不是紅寶石程序員。

回答

2

我想在C:\ OpenSSL中使用rubyinstaller-2.1.6.exe,DevKit-mingw64-32-4.7.2-20130224-1151-sfx.exe和OpenSSL(http://slproweb.com/download/Win32OpenSSL-1_0_2c.exe或從不)

gem install eventmachine -- --with-ssl-dir=C:\OpenSSL 

成功,但隨後運行薄使用SSL,利用常規方法失敗:

Encryption not available on this event-machine 

你看上面如何參數傳遞給本地的寶石設置應該幫助你。我們仍然需要找到一組可以正確構建事物的參數。

如何使

checking for main() in -lssl... no 

一個是...?

後挖我已經修補EventMachine的正確搜索SSL庫的窗口,以便在Gemfile中使用以下行之前更改合併半天:

gem 'eventmachine', :github => 'krzcho/eventmachine', :branch => 'master' 

安裝包中指定SSL的位置之前(它必須與開發商頭/庫完整版本的SSL)

bundle config build.eventmachine --with-ssl-dir=c:/OpenSSL 

我還需要使自己瘦未激活另一EventMachine的所以需要在Gemfile中另一行:

gem 'thin', :github => 'krzcho/thin', :branch => 'master' 

不幸的是我使用非自簽名的證書時,還是有問題: thin rails server/eventmachine on windows does not work with custom certificate(結案 - 錯CERT)

+0

我已經解決此問題athough我不記得已經究竟是如何工作。可能通過尋找可分離的寶石版本。我也嘗試避免修改第三方代碼 - 沒有人負責這種修改。無論如何,這是很好,youu找到解決方案,它可以節省時間給別人 – sergtk

+0

你知道 - 這是一個開源的力量 - 每個人都可以提供:) – Kodak

相關問題