Hi Hernan,

finally I switch back to Linux to make it work, OSX gives me headaches.

So on linux the yaz module is found. I get the "Unable to find function
address" but I found that writing:
 <cdecl: ZOOMOptions 'ZOOM_options_create' (void) module: 'yaz'>
instead of
<cdecl: ZOOMOptions '_zoom_options_cre...@0' (void) module: 'yaz3'>

works. If I understand, function names are not mangled when compiling with
gcc on Linux.


Trying to run tests I've also had a "could not coerce arguments" in
Z3950FFILibrary>>createConnectionTo:port because Z3950TestCase>>portNumber
answers a String and

<cdecl: ZOOMConnection 'ZOOM_connection_new' (char* short) module: 'yaz'>

so it's waiting for a short. I've replaced portNumber to answer a
SmallInteger.

And now the image crashes on connectionIsIdle call:

write(1, "\ncreateConnectionTo:port:", 25) = 25
write(1, "\nconnectionIsIdle:", 18)     = 18
rt_sigprocmask(SIG_UNBLOCK, [ABRT], NULL, 8) = 0
write(1, "\n", 1)                       = 1
tgkill(25830, 25830, SIGABRT)           = 0
--- SIGABRT (Aborted) @ 0 (0) ---


Any idea ?


Laurent Laffont

On Tue, Dec 21, 2010 at 7:58 AM, laurent laffont
<laurent.laff...@gmail.com>wrote:

> The module is found ! How:
> - Using VM Squeak 5.8b12 2  (instead of Cog or the VM provided in Seaside
> One-Click image)
> - go in Squeak\ 5.8b12\ 2.app/Contents/Resources/, then ln -s
> /usr/local/lib/libyaz.3.dylib .
>
> Now I have the "Unable to find function address" you have talked earlier :)
> I will look at the mangled function names.
>
>
> Laurent  --- on the road to the FFI mountain.
>
>
> On Tue, Dec 21, 2010 at 6:59 AM, Hernán Morales Durand <
> hernan.mora...@gmail.com> wrote:
>
>> Laurent,
>> I forward this e-mail to the squeak mailing list, may be someone there
>> have a better idea how the OSX VM works. BTW there are more
>> commentaries here
>>
>> http://forum.world.st/squeak-dev-Alien-amp-Squeak-FFI-issues-on-Snow-Leopard-td85608.html
>> Cheers,
>>
>> Hernán
>>
>> 2010/12/20 laurent laffont <laurent.laff...@gmail.com>:
>> > Hi Hernan,
>> > the strace equivalent on OSX seems to be dtruss (yes I'm learning OSX
>> too :)
>> > sudo dtruss -p [pid of process]
>> > in the trace I have this:
>> >
>> stat("/Users/laurentlaffont/Downloads/Seaside.app/Contents/Resources/yaz3.bundle/Contents/MacOS/yaz3\0",
>> > 0xBFF59440, 0xBFF5AB28) = -1 Err#2
>> >
>> stat64("/Users/laurentlaffont/Downloads/Seaside.app/Contents/Resources/yaz3.bundle/Contents/MacOS/yaz3\0",
>> > 0xBFF5892C, 0xBFF5AB28) = -1 Err#2
>> >
>> stat("/Users/laurentlaffont/Downloads/Seaside.app/Contents/Resources/yaz3\0",
>> > 0xBFF59440, 0xBFF5AB28) = 0 0
>> >
>> stat64("/Users/laurentlaffont/Downloads/Seaside.app/Contents/Resources/yaz3\0",
>> > 0xBFF5892C, 0xBFF5AB28) = 0 0
>> >
>> open("/Users/laurentlaffont/Downloads/Seaside.app/Contents/Resources/yaz3\0",
>> > 0x0, 0x0) = 12 0
>> > pread(0xC, "\317\372\355\376\a\0", 0x1000, 0x0) = 4096 0
>> > close(0xC) = 0 0
>> >
>> stat("/Users/laurentlaffont/Downloads/Plugins/yaz3.bundle/Contents/MacOS/yaz3\0",
>> > 0xBFF59440, 0x1000) = -1 Err#2
>> >
>> stat64("/Users/laurentlaffont/Downloads/Plugins/yaz3.bundle/Contents/MacOS/yaz3\0",
>> > 0xBFF5892C, 0x1000) = -1 Err#2
>> > stat("/Users/laurentlaffont/Downloads/Plugins/yaz3\0", 0xBFF59440,
>> 0x1000) =
>> > -1 Err#2
>> > stat64("/Users/laurentlaffont/Downloads/Plugins/yaz3\0", 0xBFF5892C,
>> 0x1000)
>> > = -1 Err#2
>> >
>> > so it looks like the VM is trying to find yaz3 at non standard Unix
>> places
>> > (I don't know if it's SqueakVM or OSX related).
>> > I've created Contents/Resources/yaz3.bundle/Contents/MacOS/, put yaz lib
>> > there, ln -s libyaz.3.dylib yaz3 but no success.
>> >
>> > I've read good post
>> http://forum.world.st/FFI-Documentation-td2225150.html :
>> >
>> > Module Location - where the external library file lives
>> >       - depends on the platform
>> >               - Mac
>> >                       - pre Snow Leopard
>> >                               - checks VM path and common library paths
>> >                       - Snow Leopard
>> >                               - only looks in VM bundle's Resources
>> file, you must either [5]:
>> >                                       - store all external libraries
>> there
>> >                                       - ln -s path/to/library
>> path/to/VM/Resources/library_name
>> >                                       - Change the VM's Info.plist
>> "SqueakPluginsBuiltInOrLocalOnly" key from
>> > "true" to "false."
>> >
>> > For this SqueakPluginsBuiltInOrLocalOnly I suppose I need to compile a
>> VM ?
>> > Cheers,
>> > Laurent Laffont
>> >
>> >
>> > On Mon, Dec 20, 2010 at 4:12 PM, Hernán Morales Durand
>> > <hernan.mora...@gmail.com> wrote:
>> >>
>> >> Hi Laurent
>> >>
>> >> I've read there is a couple of system calll monitors in MacOS, ktrace
>> >> and dtrace (http://en.wikipedia.org/wiki/Ktrace ,
>> >> http://en.wikipedia.org/wiki/DTrace) so you may attach to the VM and
>> >> see what's missing?
>> >> Cheers,
>> >>
>> >> Hernán
>> >>
>> >> 2010/12/20 laurent laffont <laurent.laff...@gmail.com>:
>> >> > Thanks Hernan.
>> >> > It still doesn't work. I've also tried to play with LD_LOAD_PATH /
>> >> > LD_LIBRARY_PATH no success.... I want to make it work so I need to
>> learn
>> >> > :)
>> >> >
>> >> > For the mangled function names, on Linux and OSX there's nm.
>> >> > Here's what I get:
>> >> > $ nm -g libyaz.3.dylib | grep ZOOM_connection_create
>> >> > 0000000000046a30 T _ZOOM_connection_create
>> >> > Cheers,
>> >> > Laurent
>> >> >
>> >> > On Sun, Dec 19, 2010 at 6:23 PM, Hernán Morales Durand
>> >> > <hernan.mora...@gmail.com> wrote:
>> >> >>
>> >> >> Hi Laurent,
>> >> >>
>> >> >> Thanks for reporting. The correct #moduleName for MacOS was missing,
>> >> >> I've uploaded a new version answering 'libyaz.3.dylib' which I guess
>> >> >> is the corresponding for 'yaz3.dll' (according to
>> >> >> http://en.wikipedia.org/wiki/Dynamic_library#Naming ).
>> >> >>
>> >> >> I haven't access to a MacOS, but in Windows I've had to find the
>> >> >> mangled function names (i.e. _zoom_connection_cre...@4) so FFI can
>> >> >> find the function addresses and you don't get the classic "Error:
>> >> >> Unable to find function address". I don't know if it's related since
>> >> >> talks about C++, but you may want to check
>> >> >> http://wiki.squeak.org/squeak/3735
>> >> >>
>> >> >> The tool I've used to find the mangled function names in Windows is
>> >> >> the Steve Miller's Dependency Walker
>> http://www.dependencywalker.com/
>> >> >>
>> >> >> 2010/12/19 laurent laffont <laurent.laff...@gmail.com>:
>> >> >> > Hi,
>> >> >> >
>> >> >> > I want to use http://www.squeaksource.com/Z3950
>> >> >> > Following install instructions, I've dowloaded yaz sources (I've
>> >> >> > tried
>> >> >> > 4.1.2
>> >> >> > and 3.0.52) as it seems there's no binary for OSX, ./configure
>> >> >> > && make
>> >> >> > &&
>> >> >> > make install.
>> >> >> > Then using latest Seaside One Click image I've copied
>> >> >> > /usr/local/lib/*yaz*
>> >> >> >  in Seaside.app/Contents/MacOS
>> >> >> > $ ls ~/Downloads/Seaside.app/Contents/MacOS/
>> >> >> > Squeak VM Opt         libyaz.a              libyaz.la
>> >> >> > libyaz_icu.a          libyaz_icu.la         libyaz_server.a
>> >> >> > libyaz_server.la libyaz.3.dylib        libyaz.dylib
>> >> >> >  libyaz_icu.3.dylib    libyaz_icu.dylib      libyaz_server.3.dylib
>> >> >> > libyaz_server.dylib
>> >> >> >
>> >> >> >
>> >> >> > But then I have a External Module Not Found on
>> >> >> > YAZPQFFFILibrary>>createParser
>> >> >> > " YAZPQDFFILibrary default createParser "
>> >> >> > <cdecl: YAZPQFParser 'yaz_pqf_create' (void) module: 'yaz3'>
>> >> >> > ^ self externalCallFailed
>> >> >> >
>> >> >> > Any hint ?
>> >> >> > Cheers,
>> >> >> > Laurent Laffont -- FFI newbie
>> >> >> >
>> >> >> > Pharo Smalltalk Screencasts: http://www.pharocasts.com/
>> >> >> > Blog: http://magaloma.blogspot.com/
>> >> >> >
>> >> >>
>> >> >> --
>> >> >> Hernán Morales
>> >> >> Information Technology Manager,
>> >> >> Institute of Veterinary Genetics.
>> >> >> National Scientific and Technical Research Council (CONICET).
>> >> >> La Plata (1900), Buenos Aires, Argentina.
>> >> >> Telephone: +54 (0221) 421-1799.
>> >> >> Internal: 422
>> >> >> Fax: 425-7980 or 421-1799.
>> >> >
>> >> >
>> >
>> >
>>
>
>

Reply via email to