delorie.com/archives/browse.cgi   search  
Mail Archives: cygwin/2006/07/18/13:11:03

X-Spam-Check-By: sourceware.org
To: cygwin AT cygwin DOT com
From: Jay Levitt <jay+news AT jay DOT fm>
Subject: Loading cygwin libraries in Ruby from CMD?
Date: Tue, 18 Jul 2006 13:02:09 -0400
Lines: 105
Message-ID: <cxblrql5ofz$.dlg@jay.fm>
Mime-Version: 1.0
User-Agent: 40tude_Dialog/2.0.15.1 (ce6b013f.44.0)
X-IsSubscribed: yes
Mailing-List: contact cygwin-help AT cygwin DOT com; run by ezmlm
List-Subscribe: <mailto:cygwin-subscribe AT cygwin DOT com>
List-Archive: <http://sourceware.org/ml/cygwin/>
List-Post: <mailto:cygwin AT cygwin DOT com>
List-Help: <mailto:cygwin-help AT cygwin DOT com>, <http://sourceware.org/ml/#faqs>
Sender: cygwin-owner AT cygwin DOT com
Mail-Followup-To: cygwin AT cygwin DOT com
Delivered-To: mailing list cygwin AT cygwin DOT com

This may not be a cygwin issue at all, but it never hurts to ask...

I'm using the Ruby library RMagick (http://rmagick.rubyforge.org) with ruby
1.8.4, which I've successfully built under Cygwin.  When I launch IRB (the
interactive ruby interpreter) from bash, and type "require 'RMagick'", it
loads successfully.  Ditto for a script running from /usr/local/bin/ruby.

However, when I do the same from CMD.EXE, I get an error:

/usr/lib/ruby/site_ruby/1.8/RMagick.rb:28: uninitialized constant
Magick::Enum (NameError)
from /usr/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:27:in `require'
from jaytest.rb:1

Using Filemon from Sysinternals (http://www.sysinternals.com), it appears
that ruby.exe loads RMagick.rb successfully.  It then attempts to load
RMagick.so; it finds it, but apparently bypasses it and continues looking
for it in every possible directory in its library path.

My suspicion is that there's something different about the environment
running from cmd.exe rather than bash, and cygwin (or ruby) decides that
i386-cygwin/RMagick.so isn't the right file to be loading for this
environment.

Ruby itself has a variable called RUBY_PLATFORM, but that is properly set
to i386-cygwin when running from cmd.  I've tried manually adding cygwin's
/bin, /usr/bin, etc. to %PATH%, to emulate cygwin.bat, but it didn't make a
difference.  I was told that incorrect library paths could cause this error
on some systems, but Cygwin doesn't use ld.so.conf. 
  
Any ideas what I could look at to see why RMagick.so isn't being loaded?
One interesting bit from strace is below - there's an error 126 (module not
found), which is odd, because clearly it has found the file.

Jay Levitt

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


   80 1927836 [main] ruby 1348 open: open
(/usr/lib/ruby/site_ruby/1.8/i386-cygwin/RMagick.so, 0x0)
   35 1927871 [main] ruby 1348 normalize_posix_path: src
/usr/lib/ruby/site_ruby/1.8/i386-cygwin/RMagick.so
   35 1927906 [main] ruby 1348 normalize_posix_path:
/usr/lib/ruby/site_ruby/1.8/i386-cygwin/RMagick.so = normalize_posix_path
(/usr/lib/ruby/site_ruby/1.8/i386-cygwin/RMagick.so)
   37 1927943 [main] ruby 1348 mount_info::conv_to_win32_path:
conv_to_win32_path (/usr/lib/ruby/site_ruby/1.8/i386-cygwin/RMagick.so)
   38 1927981 [main] ruby 1348 set_flags: flags: binary (0x2)
   35 1928016 [main] ruby 1348 mount_info::conv_to_win32_path: src_path
/usr/lib/ruby/site_ruby/1.8/i386-cygwin/RMagick.so, dst
C:\cygwin\lib\ruby\site_ruby\1.8\i386-cygwin\RMagick.so, flags 0xA, rc 0
   58 1928074 [main] ruby 1348 symlink_info::check: not a symlink
   36 1928110 [main] ruby 1348 symlink_info::check: 0 = symlink.check
(C:\cygwin\lib\ruby\site_ruby\1.8\i386-cygwin\RMagick.so, 0x240AAF0) (0xA)
   37 1928147 [main] ruby 1348 path_conv::check:
this->path(C:\cygwin\lib\ruby\site_ruby\1.8\i386-cygwin\RMagick.so),
has_acls(1)
   37 1928184 [main] ruby 1348 build_fh_pc: fh 0x6115CE7C
   37 1928221 [main] ruby 1348 fhandler_base::open:
(C:\cygwin\lib\ruby\site_ruby\1.8\i386-cygwin\RMagick.so, 0x100000)
  211 1928432 [main] ruby 1348 fhandler_base::set_flags: flags 0x100000,
supplied_bin 0x10000
   39 1928471 [main] ruby 1348 fhandler_base::set_flags: filemode set to
binary
   35 1928506 [main] ruby 1348 fhandler_base::open: 0 = NtCreateFile
(0x6F8, 80100000, C:\cygwin\lib\ruby\site_ruby\1.8\i386-cygwin\RMagick.so,
io, NULL, 0, 7, 1, 20, NULL, 0)
   38 1928544 [main] ruby 1348 fhandler_base::open: 1 = fhandler_base::open
(C:\cygwin\lib\ruby\site_ruby\1.8\i386-cygwin\RMagick.so, 0x100000)
   36 1928580 [main] ruby 1348 fhandler_base::open_fs: 1 =
fhandler_disk_file::open
(C:\cygwin\lib\ruby\site_ruby\1.8\i386-cygwin\RMagick.so, 0x0)
   36 1928616 [main] ruby 1348 open: 3 = open
(/usr/lib/ruby/site_ruby/1.8/i386-cygwin/RMagick.so, 0x0)
   55 1928671 [main] ruby 1348 _cygwin_istext_for_stdio: fd 3: opened as
binary
   95 1928766 [main] ruby 1348 close: close (3)
   34 1928800 [main] ruby 1348 fhandler_base::close: closing
'/usr/lib/ruby/site_ruby/1.8/i386-cygwin/RMagick.so' handle 0x6F8
   49 1928849 [main] ruby 1348 close: 0 = close (3)
  244 1929093 [main] ruby 1348 normalize_posix_path: src
/usr/lib/ruby/site_ruby/1.8/i386-cygwin/RMagick.so
   39 1929132 [main] ruby 1348 normalize_posix_path:
/usr/lib/ruby/site_ruby/1.8/i386-cygwin/RMagick.so = normalize_posix_path
(/usr/lib/ruby/site_ruby/1.8/i386-cygwin/RMagick.so)
   37 1929169 [main] ruby 1348 mount_info::conv_to_win32_path:
conv_to_win32_path (/usr/lib/ruby/site_ruby/1.8/i386-cygwin/RMagick.so)
   36 1929205 [main] ruby 1348 set_flags: flags: binary (0x2)
   35 1929240 [main] ruby 1348 mount_info::conv_to_win32_path: src_path
/usr/lib/ruby/site_ruby/1.8/i386-cygwin/RMagick.so, dst
C:\cygwin\lib\ruby\site_ruby\1.8\i386-cygwin\RMagick.so, flags 0xA, rc 0
   57 1929297 [main] ruby 1348 symlink_info::check: not a symlink
   37 1929334 [main] ruby 1348 symlink_info::check: 0 = symlink.check
(C:\cygwin\lib\ruby\site_ruby\1.8\i386-cygwin\RMagick.so, 0x240AB80) (0xA)
   36 1929370 [main] ruby 1348 path_conv::check:
this->path(C:\cygwin\lib\ruby\site_ruby\1.8\i386-cygwin\RMagick.so),
has_acls(1)
 3763 1933133 [main] ruby 1348 seterrno_from_win_error:
/netrel/src/cygwin-1.5.19-4/winsup/cygwin/dlfcn.cc:103 windows error 126
   99 1933232 [main] ruby 1348 geterrno_from_win_error: windows error 126
== errno 2
   37 1933269 [main] ruby 1348 __set_errno: void
seterrno_from_win_error(const char*, int, DWORD):310 val 2
   37 1933306 [main] ruby 1348 dlopen: ret 0x0


--
Unsubscribe info:      http://cygwin.com/ml/#unsubscribe-simple
Problem reports:       http://cygwin.com/problems.html
Documentation:         http://cygwin.com/docs.html
FAQ:                   http://cygwin.com/faq/

- Raw text -


  webmaster     delorie software   privacy  
  Copyright © 2019   by DJ Delorie     Updated Jul 2019