Date: 2010-11-23 13:28
Sender: Graeme Mathieson
Hi,
I think I might be stumbling across the same problem. I've had
a wee dig around and think I might have some further information,
but I'm not entirely sure what to make of it.
First of all, some background. We have a CI server to verify
that the tests are passing. It runs through the following
process:
* Grab the latest code
* Create an empty RVM gemset
* Use gem bundler to install all the gem dependencies
* Run the test suite.
Sounds good? It is, most of the time. Once in a while, though,
when attempting to run the test suite, we get:
dlopen(/Users/ci/.rvm/gems/ree-1.8.7-2010.02@cruise-78296/gems/li
bxml-ruby-1.1.4/lib/libxml_ruby.bundle, 9): Symbol not found:
_cXMLNode
Referenced from: /Users/ci/.rvm/gems/ree-1.8.7-2010.02@cruise-78
296/gems/libxml-ruby-1.1.4/lib/libxml_ruby.bundle
Expected in: flat namespace
in /Users/ci/.rvm/gems/ree-1.8.7-2010.02@cruise-78296/gems/libxm
l-ruby-1.1.4/lib/libxml_ruby.bundle
- /Users/ci/.rvm/gems/ree-1.8.7-2010.02@cruise-78296/gems/libxml-
ruby-1.1.4/lib/libxml_ruby.bundle
This doesn't happen on all runs, and re-running the CI build
with the same commit often makes it work again later, so I'm
reasonably(ish!) confident it's not an app problem. This is a
CI server that I'm not actively messing with either, so I'm reasonably
happy that the environment is stable.
So, I dug in a little. It's right, that bundle doesn't have the
symbol it's looking for. In fact, the bundle doesn't have any
symbols:
$ nm libxml-ruby-1.1.4-broken/lib/libxml_ruby.bundle
0000000000000000 t __mh_bundle_header
U dyld_stub_binder
That's weird, right? Well, weirder still, none of the object
files have any symbols:
$ nm libxml-ruby-1.1.4-broken/ext/libxml/ruby_xml.o
produces nothing. So, gcc is producing a file without any symbols.
What kind of file is it producing?
$ file libxml-ruby-1.1.4-broken/ext/libxml/ruby_xml.o
libxml-ruby-1.1.4-broken/ext/libxml/ruby_xml.o: 80386 COFF executable
not stripped - version 30821
That's weird, because a correctly built version is a Mach-O 64
bit object file as you'd expect:
$ file libxml-ruby-1.1.4-working/ext/libxml/ruby_xml.o
libxml-ruby-1.1.4-working/ext/libxml/ruby_xml.o: Mach-O 64-bit
object x86_64
Apart from the generated objects and bundles, there are no appreciable
differences between the broken version and the working version:
$ diff -urN libxml-ruby-1.1.4-{broken,working}
diff -urN libxml-ruby-1.1.4-broken/ext/libxml/Makefile
libxml-ruby-1.1.4-working/ext/libxml/Makefile
--- libxml-ruby-1.1.4-broken/ext/libxml/Makefile 2010-11-23
12:02:32.000000000 +0000
+++ libxml-ruby-1.1.4-working/ext/libxml/Makefile 2010-11-23
11:32:32.000000000 +0000
@@ -96,8 +96,8 @@
BINDIR = $(bindir)
RUBYCOMMONDIR = $(sitedir)$(target_prefix)
-RUBYLIBDIR = /Users/ci/.rvm/gems/ree-1.8.7-2010.02@cruise-5839/g
ems/libxml-ruby-1.1.4/lib$(target_prefix)
-RUBYARCHDIR = /Users/ci/.rvm/gems/ree-1.8.7-2010.02@cruise-5839/
gems/libxml-ruby-1.1.4/lib$(target_prefix)
+RUBYLIBDIR = /Users/ci/.rvm/gems/ree-1.8.7-2010.02@cruise-3367/g
ems/libxml-ruby-1.1.4/lib$(target_prefix)
+RUBYARCHDIR = /Users/ci/.rvm/gems/ree-1.8.7-2010.02@cruise-3367/
gems/libxml-ruby-1.1.4/lib$(target_prefix)
TARGET_SO = $(DLLIB)
CLEANLIBS = $(TARGET).bundle $(TARGET).il? $(TARGET).tds
$(TARGET).map
diff -urN libxml-ruby-1.1.4-broken/ext/libxml/mkmf.log
libxml-ruby-1.1.4-working/ext/libxml/mkmf.log
--- libxml-ruby-1.1.4-broken/ext/libxml/mkmf.log 2010-11-23
12:02:32.000000000 +0000
+++ libxml-ruby-1.1.4-working/ext/libxml/mkmf.log 2010-11-23
11:32:32.000000000 +0000
@@ -1,7 +1,7 @@
have_library: checking for socket() in -lsocket...
-------------------- no
"gcc -o conftest -I.
-I/Users/ci/.rvm/rubies/ree-1.8.7-2010.02/lib/ruby/1.8/i686-darwi
n10.4.0 -I. -D_XOPEN_SOURCE -D_DARWIN_C_SOURCE -g -O2 -pipe
-fno-common conftest.c
-L. -L/Users/ci/.rvm/rubies/ree-1.8.7-2010.02/lib
-L/Users/ci/.rvm/rubies/ree-1.8.7-2010.02/lib -L. -lruby-static
-lsocket -ldl -lobjc "
-/Users/ci/.rvm/rubies/ree-1.8.7-2010.02/lib/ruby/1.8/mkmf.rb:266:
warning: Insecure world writable dir
/Users/ci/.rvm/gems/ree-1.8.7-2010.02@cruise-5839/bin in PATH,
mode 040777
+/Users/ci/.rvm/rubies/ree-1.8.7-2010.02/lib/ruby/1.8/mkmf.rb:266:
warning: Insecure world writable dir
/Users/ci/.rvm/gems/ree-1.8.7-2010.02@cruise-3367/bin in PATH,
mode 040777
conftest.c: In function ‘t’:
conftest.c:3: error: ‘socket’ undeclared (first use in this
function)
conftest.c:3: error: (Each undeclared identifier is reported
only once
The host environment here is Mac OS X 10.6.5, we're using Ruby
Enterprise Edition 2010.02 (1.8.7), and we're using the Mac OS
X-supplied libxml2:
$ which xml2-config
/usr/bin/xml2-config
$ xml2-config --version
2.7.3
I have no idea where to go next while tracking this down! Any
suggestions? |
Date: 2010-04-18 12:06
Sender: Jim Tobin
I see this, too. Both the reporting of 1.1.2 and 1.1.3 installed,
and the missing symbol. Curiously, my Leopard machine does not
report a missing symbol, and it has 1.1.3, 0.9.5 and 0.3.8.4
installed |