harmony-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Ilya Berezhniuk" <ilya.berezhn...@gmail.com>
Subject Re: [general] How to deal with global/static variables in a static library while linking?
Date Mon, 01 Sep 2008 10:28:05 GMT
BTW, while implementing 'separate DLL' way on Linux, I observed
another difficult problem.
HyThr shared library which used this 'single-instance DLL' is loaded
twice - by launcher when initializing HyPort; and after fork()
performed to set LD_LIBRARY_PATH - by the VM.

The problem appeared because this 'single-instance DLL' cannot be
found by LD before setting up LD_LIBRARY_PATH, so current ugly
solution is the following:
- 'single-instance DLL' functions are accessed manually with dlopen/dlsym;
- when these functions cannot be resolved (first HyThr instance before
forking), all operations requiring these functions are simply omitted.


2008/9/1 Ligang Wang <wanglg9711@gmail.com>:
> Pavel and Chunrong, thanks to both of you.
>
> Making this "var" in a separate DLL should have no problem. I will try this
> method.
>
> Regards,
> Ligang
>
>
> On 9/1/08, Pavel Pervov <pmcfirst@gmail.com> wrote:
>>
>> What Chunrong proposes is implementation specific.
>>
>> The only correct way is to have this "var" in a separate DLL. That is
>> why port_ch was separated from static part of port library - it has
>> data shared across different dynamic libraries.
>>
>> WBR,
>>    Pavel.
>>
>> On Mon, Sep 1, 2008 at 6:06 AM, Ligang Wang <wanglg9711@gmail.com> wrote:
>> > Hi, all,
>> >
>> >
>> > I encountered a problem after adding some code into DRLVM. The following
>> is
>> > a simplified example for the problem:
>> >
>> > In static library A, there is a header file A.h and a C file A.c.
>> >
>> >
>> > In A.h:
>> > extern function1();
>> >
>> >
>> > In A.c:
>> >
>> > (static) var;   // a static or global variable
>> >
>> > Function1()
>> >
>> > {
>> >
>> > ……
>> >
>> > Function2();
>> >
>> > ……
>> >
>> > }
>> >
>> > Function2()
>> >
>> > {
>> >
>> > Access var;
>> >
>> > }
>> >
>> >
>> >
>> > Several DLLs include A.h and call function1. And the final executable
>> uses
>> > all these DLLs.
>> >
>> >
>> >
>> > The question here is, will each DLL allocate a memory unit for var? And
>> what
>> > memory address will each DLL reference for var? Is there any difference
>> > between the static case and global case for the memory allocation
>> problem?
>> >
>> >
>> > Actually in Harmony library A is the port module and those DLLs stand for
>> > vmcore, gc_gen, JNI, etc. While debugging I found that a static variable
>> I
>> > defined in the port module has different addresses when accessed from
>> > different DLLs. Changing it to a global variable has no impact on this.
>> >
>> > Anyone can help me? Thanks in advance.
>> >
>> > Regards,
>> > Ligang
>> >
>>
>



-- 
Ilya.

Mime
View raw message