[Ruby] Native extensions on OS X
Aaron Patterson
aaron at tenderlovemaking.com
Mon Jul 9 07:26:40 PDT 2007
On Mon, Jul 09, 2007 at 08:57:07AM -0700, Eric Hodel wrote:
> On Jul 8, 2007, at 19:21, Aaron Patterson wrote:
>
> > Alright, I'm not sure what I'm doing wrong....
> >
> > I'm writing a native extension that loads a shared object. But for
> > some
> > reason, it can't find the symbols from the shared object! Everything
> > works on linux, but for some reason OS X doesn't seem to work.
> >
> > Here's my compile output:
> >
> > [aaron at aaron-pattersons-powerbook58 ext]$ make
> > gcc -fno-common -arch ppc -g -Os -pipe -fno-common -arch ppc -
> > pipe -pipe -fno-common -I. -I/usr/lib/ruby/1.8/powerpc-darwin8.0 -
> > I/usr/lib/ruby/1.8/powerpc-darwin8.0 -I. -DHAVE_LAME_LAME_H -c
> > decoder.c
> > gcc -fno-common -arch ppc -g -Os -pipe -fno-common -arch ppc -
> > pipe -pipe -fno-common -I. -I/usr/lib/ruby/1.8/powerpc-darwin8.0 -
> > I/usr/lib/ruby/1.8/powerpc-darwin8.0 -I. -DHAVE_LAME_LAME_H -c
> > get_audio.c
> > gcc -fno-common -arch ppc -g -Os -pipe -fno-common -arch ppc -
> > pipe -pipe -fno-common -I. -I/usr/lib/ruby/1.8/powerpc-darwin8.0 -
> > I/usr/lib/ruby/1.8/powerpc-darwin8.0 -I. -DHAVE_LAME_LAME_H -c
> > lollame.c
> > gcc -fno-common -arch ppc -g -Os -pipe -fno-common -arch ppc -
> > pipe -pipe -fno-common -I. -I/usr/lib/ruby/1.8/powerpc-darwin8.0 -
> > I/usr/lib/ruby/1.8/powerpc-darwin8.0 -I. -DHAVE_LAME_LAME_H -c
> > syncword.c
> > cc -dynamic -bundle -undefined suppress -flat_namespace -L"/usr/
> > lib" -o lollame.bundle decoder.o get_audio.o lollame.o syncword.o -
> > lpthread -ldl -lobjc
> >
> >
> > When I run my test script:
> >
> > dyld: NSLinkModule() error
> > dyld: Symbol not found: _lame_get_num_channels
> > Referenced from: ./lollame.bundle
> > Expected in: flat namespace
> >
> > Trace/BPT trap
> >
> > My dlopen line from my code:
> >
> > dlopen("libmp3lame.dylib", RTLD_NOW | RTLD_GLOBAL);
> >
> > Does anyone have any ideas with what might be wrong?
>
> Is it static? I always get that wrong.
>
> nm lollame.bundle | grep -i ' t '
>
> Big T is dynamically linkable. Little t is not.
I don't think so.... lame_get_num_channels is defined in
libmp3lame.bundle:
[aaron at amac ext]$ nm /usr/local/lib/libmp3lame.dylib | grep -i ' t ' | grep get_num_channels
00033cd5 T _lame_get_num_channels
I tried running ktrace on the process, and I don't see it open
libmp3lame.dylib. It seems like its trying to resolve symbols before I
load my shared object!
--
Aaron Patterson
http://tenderlovemaking.com/
More information about the Ruby
mailing list