thanks hernan. We want to script the BNF (bibliotheque Nationale de France :)). which has a Z3950 server Stef On Dec 23, 2010, at 1:57 AM, Hernán Morales Durand wrote:
Hi Laurent,
Thanks for the feedback, I've uploaded the repository with the missing method but I cannot reproduce the crash in Windows. Have you unmangled every function name tested? Are you running just the Z3950FFILibraryTest? Notice the Z3950FFIServerLibraryTest tests are performed against a Z39.50 server running in local host, otherwise will fail (however that shouldn't crash the VM), so you may want to run only the Z3950FFILibraryTest suite. If you or anyone want a local Zebra server for Win32 - although most configuration files should work with other platforms - for testing purposes please let me know.
Does the Kant test crash the VM too?
Z3950Client new server: #Acadia; query: ( Z3950Query new author: 'Kant' ).
(see http://67.222.12.200:8889/WebOpus/52 for sample successful results)
I will set up a Linux box tomorrow and try to reproduce there. Cheers,
2010/12/22 laurent laffont <laurent.laffont@gmail.com>:
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_create@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.laffont@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.morales@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... Cheers,
Hernán
2010/12/20 laurent laffont <laurent.laffont@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.morales@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.laffont@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.morales@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_create@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.laffont@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.
-- 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.