Subject:
[ruby-ffi] Re: newbie question ffi on OsX
From:
macarthy
Date:
3/9/10 8:56 AM
To:
ruby-ffi

Answering my own question, since I can't recompile the lib as 64bit I
was able to run ruby as 32 bit and ffi works fine, Commands and output
below.

$ lipo -info /usr/local/lib/libmylib.dylib
Non-fat file: /usr/local/lib/libmylib.dylib is architecture: i386

$ lipo -detailed_info /usr/bin/ruby
Fat header in: /usr/bin/ruby
fat_magic 0xcafebabe
nfat_arch 3
architecture x86_64
    cputype CPU_TYPE_X86_64
    cpusubtype CPU_SUBTYPE_X86_64_ALL
    offset 4096
    size 14176
    align 2^12 (4096)
architecture i386
    cputype CPU_TYPE_I386
    cpusubtype CPU_SUBTYPE_I386_ALL
    offset 20480
    size 14112
    align 2^12 (4096)
architecture ppc7400
    cputype CPU_TYPE_POWERPC
    cpusubtype CPU_SUBTYPE_POWERPC_7400
    offset 36864
    size 13904
    align 2^12 (4096)


$ arch -arch i386 /usr/bin/ruby libmylib.rb


> Hi all,
>
> Can someone explain this error ? Obviously an architecture mismatch of
> some sort, how does one got about fixing this? Or compile libmylib as
> a different arch (or as several ? )
>
> /Library/Ruby/Gems/1.8/gems/ffi-0.6.2/lib/ffi/library.rb:61:in
> `ffi_lib': Could not open library 'libmylib.dylib':
> dlopen(libmylib.dylib, 9): no suitable image found.  Did find:
> (LoadError)
>
> /usr/local/lib/libmylib.dylib: mach-o, but wrong architecture. Could
> not open library 'libmylib': dlopen(libmylib, 9): image not found
>         from /Library/Ruby/Gems/1.8/gems/ffi-0.6.2/lib/ffi/library.rb:
> 43:in `map'
>         from /Library/Ruby/Gems/1.8/gems/ffi-0.6.2/lib/ffi/library.rb:
> 43:in `ffi_lib'
>         from xxx.rb:14
>
> otool gives me this ...
>
>  otool -h /usr/local/lib/libmylib.dylib
>
> /usr/local/lib/libmylib.dylib:
> Mach header
>       magic cputype cpusubtype  caps    filetype ncmds sizeofcmds
> flags
>  0xfeedface       7          3  0x00          6    20       2404
> 0x00118085
>
> Thanks