Re: reload .so without restarting process

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



2013/12/3 Sam Varshavchik <mrsam@xxxxxxxxxxxxxxx>:
> Hatt Tom writes:
>
>> Here is one  example :
>>
>> First, I linked  liba.so into executable target by the compiler
>> command  "g++ -la " at linking stage .
>>
>> then ,I use dlopen to load liba.so in the executable's process .
>>
>> At this time ,the reference count of liba.so is 2 ,  am I right ?
>
>
> Right.
>
> And if you think you can just dlclose() it an extra time, think again. It
> won't work. For at least two reasons.
>
> 1) dlopen() returns an opaque handle for each open. Opening the same .so is
> going to give you a technically different handle, and because you can only
> dlclose() a handle that you've opened, and you do not have a handle that was
> used to, essentially, dlopen the directly-linked library, you can't do it.
>
> 2) Your existing executable has resolved the external symbols to your .so
> already (via a process that's equivalent to dlsym(), even before your
> executable ran). Even if you somehow manage to close it, and dlopen it back,
> the existing linkage remains what it is. Hillarity ensues.

So if I link that .so against my executable by "g++ -l " command
,then I can not dlclose it fully in process at all  ?

Tp dlclose it  fully , I must not link it by compiler ,but manually
use dlopen and dlsym to resolve the external symbols  .

But if so ,how to make  the compiler not to compalain "not reference
to symbol xxx" at compiling stage ?


Thanks!

>
> So, you have no choice but to dlopen() your library, right from the start.
> You have no other options.
>
>
>>
>>
>>
>> 2013/12/3 Sam Varshavchik <mrsam@xxxxxxxxxxxxxxx>:
>> > Hatt Tom writes:
>> >
>> >> Thanks ! The problem has been resolved .
>> >>
>> >> And hereis one question I should get to be clear of . if I link one
>> >> .so into one executeable file , would this increase the reference
>> >> count by one already ? so dlclose would not unload that .so until the
>> >> reference count decrease to zero .
>> >
>> >
>> > Correct.
>> >
>> >
>> >>
>> >> 2013/12/2 Sam Varshavchik <mrsam@xxxxxxxxxxxxxxx>:
>> >> > Hatt Tom writes:
>> >> >
>> >> >> If I use dlsym() to load the address manually ,will  GOT  be  needed
>> >> >> any
>> >> >> more ?
>> >> >
>> >> >
>> >> > If you always use dlopen(), and the dlsym() to call methods from a
>> >> > .so,
>> >> > you
>> >> > don't really need to link to it directly, any more, so this is a moot
>> >> > point.
>> >> >
>> >> >
>> >> >
>> >> >> 2013/12/2 Nicholas Mc Guire <der.herr@xxxxxxx>:
>> >> >> > On Mon, 02 Dec 2013, Hatt Tom wrote:
>> >> >> >
>> >> >> >> And also : why cannot I dlclose a .so that I've linked my
>> >> >> >> executable
>> >> >> >> to, in the usual fashion.
>> >> >> >>
>> >> >> >> is it because the reference count of that .so  would not alwayes
>> >> >> >> to
>> >> >> >> be
>> >> >> >> zero ?
>> >> >> >>
>> >> >> >> It seems puzzling to me ?
>> >> >> >>
>> >> >> > how would you ensure consistency of the GOT ?
>> >> >> > I think the problem is that you would end up with invalid
>> >> >> > addresses
>> >> >> > in
>> >> >> > the GOT
>> >> >> > as they were setup by ld based on link-time information.
>> >> >> >
>> >> >> > thx!
>> >> >> > hofrat
>> >> >>
>> >> >>
>> >> >>
>> >> >> --
>> >> >> Best Regards!
>> >>
>> >>
>> >>
>> >> --
>> >> Best Regards!
>>
>>
>>
>> --
>> Best Regards!



-- 
Best Regards!




[Index of Archives]     [Linux C Programming]     [Linux Kernel]     [eCos]     [Fedora Development]     [Fedora Announce]     [Autoconf]     [The DWARVES Debugging Tools]     [Yosemite Campsites]     [Yosemite News]     [Linux GCC]

  Powered by Linux