It does search on LD_LIBRARY_PATH now, it just fails because it finds the
32-bit libcairo before the 64-bit one.

The traceback displayed inside Pharo says "Error: External module not
found" which is quite misleading.  A minimal fix would be to just provide a
better error message.

There is a traceback that prints to the console if you launched pharo from
it, and it does reveal the true failure, but only to someone who knows what
ELFCLASS32 means:

ioLoadModule(//usr/lib/libcairo.so.2):
  //usr/lib/libcairo.so.2: wrong ELF class: ELFCLASS32
Error: External module not found

This shows that the information for a better error message is available.

A better fix would be to skip the 32-bit lib and keep searching. This looks
like it would be messy because CairoLibrary provides the path but
​U​
FFI has to deal with it.
​ As far as I can see, there's no way to just check whether a library is
32- or 64-bit, other than trying to call something in it.

I'm a total Pharo novice (I wrote maybe 300 lines of Squeak code several
years ago) but this design seems odd to me. Why is LD_LIBRARY_PATH being
handled in​ Athens-Cairo rather than UFFI itself?

Dan






On Sat, Sep 23, 2017 at 4:03 AM, Esteban Lorenzano <esteba...@gmail.com>
wrote:

> hi,
>
> this is not a bug, UFFI cannot know where a library is (because it can be
> anywhere).
> but, not being a bug, this remains a problem :)
> One solution is to search on LD_LIBRARY_PATH but this is not generalised
> (it should) for the moment. And of course, this is a solution that works
> for linux and not other platforms, so not perfect. Also we need to consider
> architecture, etc. etc. etc.
>
> Esteban
>
>
> > On 23 Sep 2017, at 09:16, Stephane Ducasse <stepharo.s...@gmail.com>
> wrote:
> >
> > Can you open a bug entry and propose your solution?
> >
> > Stef
> >
> > On Fri, Sep 22, 2017 at 9:56 PM, Dan Wilczak <dan.g.wilc...@gmail.com>
> wrote:
> >> That pointed me in the right direction, thanks. I've got it working now.
> >>
> >> I think there's a bug there which may bite other people ---
> >>
> >> If you have both 32-bit and 64-bit versions of the library installed,
> >> Unix64ModuleName can find the
> >> 32-bit version first (depending on your LD_LIBRARY_PATH) and set that
> as the
> >> lib to use. Then when
> >> UFFI loads it, it recognizes it as 32-bit and gives up rather than
> looking
> >> in any more directories.
> >>
> >> Dan
> >>
> >>
> >>
> >> --
> >> Sent from: http://forum.world.st/Pharo-Smalltalk-Users-f1310670.html
> >>
> >
>
>
>

Reply via email to