Xfce 4.4BETA1 - core packages
Benedikt Meurer
benedikt.meurer at unix-ag.uni-siegen.de
Mon Mar 27 14:52:02 CEST 2006
Brian J. Tarricone wrote:
>>You cannot unload thunar-vfs/thunarx/libexo, as they register static
>>GTypes. I was solely talking about loading, and I doubt that this
>>
>> xfdesktop -> thunar-vfs -> libexo
>> xfdesktop -> thunarx -> extension.so[LOCAL] [-> thunar-vfs -> libexo]
>>
>>is going to work w/o trouble with the various dlopen()/shl_load()
>>implementations on the supported platforms. You'll need to be very
>>careful to even make it work with glibc, not to mention the more exotic
>>platforms.
>
> Well, the real problem comes into play if your "extension.so" above
> pulls in a different version of something already loaded. ELF is broken
> that way. Otherwise... I agree, it's messy.
I don't necessarily worry about ELF platforms (atleast the sane ones).
I'm more worried that this hack will not work at all on non-ELF
platforms, for example Cygwin comes to mind here, which uses PECOFF, or
Darwin/Mach-O, or "older" COFF/a.out based systems (for which shared
libraries are implemented as a hack, etc.). I'll try to support those
platforms as far as loading thunarx plugins goes, but I can impossibly
support thunarx/thunar-vfs/libexo itself as loadable plugins. You'll be
on your own there.
>>>I looked at relaytool, and it appears to do what I want, though it'll
>>>only work on x86. Not sure if it's worth the effort. Since all the
>>>thunar-vfs stuff is in only a couple files that won't get used at all if
>>>thunar-vfs isn't available, I might just write my own wrapper that uses
>>>GModule instead, so it should support all platforms. Again, not sure if
>>>it's worth the effort.
>>
>>GModule just uses dlopen()/shl_load().
>
> Of course. I was merely pointing out that relaytool only supports x86,
> and from looking through it, only dlopen(), so using GModule would allow
> it to work on any platform that glib supports, and hence any platform
> Xfce supports.
What I meant is: Don't rely on consistent behavior of dlopen() across
platforms. GModule is just a very slim wrapper, and it doesn't abstract
the problem of the scenario described above. Even though it provides a
consistent API on different platforms, the semantics of such special
cases may (and will) still differ among the various platforms.
> -brian
Benedikt
More information about the Xfce4-dev
mailing list