<br><br><div class="gmail_quote">On Thu, Aug 5, 2010 at 7:48 PM, Lisandro Dalcin <span dir="ltr"><<a href="mailto:dalcinl@gmail.com">dalcinl@gmail.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">
<div class="im">On 5 August 2010 18:07, Dmitry Karpeev <<a href="mailto:karpeev@mcs.anl.gov">karpeev@mcs.anl.gov</a>> wrote:<br>
><br>
><br>
> On Thu, Aug 5, 2010 at 4:00 PM, Lisandro Dalcin <<a href="mailto:dalcinl@gmail.com">dalcinl@gmail.com</a>> wrote:<br>
>><br>
>> On 5 August 2010 13:40, Dmitry Karpeev <<a href="mailto:karpeev@mcs.anl.gov">karpeev@mcs.anl.gov</a>> wrote:<br>
>> > What is the intended behavior of PetscDLSym when called on an empty<br>
>> > handle:<br>
>> > PetscDLSym(handle=PETSC_NULL, symbol, &value)<br>
>> > My understanding was that this should look for symbol in the symbol<br>
>> > table of<br>
>> > the main executable.<br>
>> > This is based on what happens in the Windows case (#ifdef<br>
>> > PETSC_HAVE_WINDOWS_H),<br>
>> > but when using dlopen (#ifdef PETSC_HAVE_DLFCN_H), this probably won't<br>
>> > behave correctly,as currently implemented.<br>
>> > This is because the above call will boil down to<br>
>> >    value = dlsym((dlhandle_t)0, symbol),<br>
>> > which on many systems returns NULL (e.g., on Ubuntu 9.10).<br>
>><br>
>> Look at your dlfch.h header file.. Does it have the line below?:<br>
>><br>
>> # define RTLD_DEFAULT   ((void *) 0)<br>
><br>
> Yes.  Ah, I see: my problem was that the symbol wasn't being exported, not<br>
> that the null handle wasn't referring to the executable.<br>
<br>
</div>Yep<br>
<div class="im"><br>
> I guess I can<br>
> change it to use RTLD_DEFAULT, but that would require changes to configure.<br>
<br>
</div>Using RTLD_DEFAULT is the right way to do it.<br>
<div class="im"><br>
> Also, this may be less portable: OSX uses a different define for the default<br>
> handle, so configure would have to<br>
> test for that too.  I wonder what OSX does for dlopen(0,flags)?<br>
><br>
<br>
</div>It likely fails with "invalid handle passed to dlsym()"<br>
(<a href="http://www.opensource.apple.com/source/dyld/dyld-132.13/src/dyldAPIs.cpp" target="_blank">http://www.opensource.apple.com/source/dyld/dyld-132.13/src/dyldAPIs.cpp</a>)<br></blockquote><div><br>The implementation of dlsym from the link above seems to imply that RTLD_DEFAULT on OSX <br>
means "search EVERYTHING", not just the main executable. No?  Some of that Apple-specific<br>code is impenetrable to me.  If I'm right, then this is contrary to the way Linux interprets RTLD_DEFAULT.<br>The Apple equivalent seems to be RTLD_MAIN_ONLY.<br>
<br>Currently PetscDLSym(0,symbol,&value) is implemented to search the main executable on Windows<br>(at least that's how I read that code, without being too familiar with the Windows API).<br>So I assume that's what we want to do everywhere else, including on OSX.<br>
This, in turn, means using RTLD_DEFAULT on Linux, RTLD_MAIN_ONLY on Apple.<br><br>Dmitry.<br></div><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">

<font color="#888888"><br>
--<br>
</font><div><div></div><div class="h5">Lisandro Dalcin<br>
---------------<br>
CIMEC (INTEC/CONICET-UNL)<br>
Predio CONICET-Santa Fe<br>
Colectora RN 168 Km 472, Paraje El Pozo<br>
Tel: +54-342-4511594 (ext 1011)<br>
Tel/Fax: +54-342-4511169<br>
</div></div></blockquote></div><br>