2011/10/6 Michael Schwartz <[email protected]>

> I am sure you don't want to statically link libv8.a multiple times.
>
>
Precisely.


> I think you need to statically link libv8.a with your main program and
> force all symbols to be exported.  Then your loaded .so can find the symbols
> for libv8 in your main program.
>
>
Okay, will try this: link v8cgi with libv8.a; link my modules with libv8.so.
V8 symbols will be available at runtime so the modules will be happy;
libv8.a will be linked just to main binary. Sounds reasonable; will let you
know about the outcome.


> Ideally you shouldn't have to static link with libv8.a at all.  I bet there
> are gcc/ld flags that would allow all to be .so.
>
>
Yes, the shared solution works flawlessly. I am just trying an alternative,
suggested by one of my users...


O.



> On Oct 6, 2011, at 7:25 AM, Ondřej Žára wrote:
>
> Hi Mike,
>
> first of all, the dlopen() call is okay: all my modules (in the failing
> scenario described above) are linked with (static) libv8.a, so they do not
> lack V8 symbols. The dlsym() call, on the other hand, begins interacting
> with V8 API, which segfaults - most probably because of some global state V8
> depends on (and is confused by having multiple V8 instances in memory).
>
> As for the GCC option to export all symbols: do you suggest compiling v8cgi
> itself first (with libv8.a), then linking all secondary modules against this
> binary, not against libv8?
>
>
> Thanks,
> Ondrej
>
>
>
> 2011/10/6 Michael Schwartz <[email protected]>
>
>> Hey Ondrej,
>>
>> There are flags for GCC that force export of ALL public symbols.  This
>> should allow your .so to find the symbols in your main binary.  There may be
>> another switch that forces the whole .a file to be linked in, not just the
>> referenced (by your main binary) symbols.
>>
>> Hope that's enough to get you going in the right direction.
>>
>>
>
>
>> Also, you are probably getting an error on dlopen(), so you should not be
>> calling dlsym()...
>>
>> :)
>>
>> On Oct 4, 2011, at 10:51 PM, ondras wrote:
>>
>> Hi,
>>
>> please forgive if this question is not directly related to V8 itself, but
>> rather to gcc/c++ usage.
>>
>> My project (v8cgi) uses a main binary and several (loadable) modules.
>> These modules are implemented as shared libraries; both the main binary and
>> modules use V8.
>> Under normal circumstances, I use a shared V8 library and everything works
>> cool.
>>
>> One of v8cgi users recently suggested if it would be possible to use a
>> static build of libv8. I tried that and failed: having V8 linked to both the
>> main binary *and* all the modules seems to crash badly (segfault) when I
>> dlsym() the first external module.
>>
>> 1) is the static V8 the reason why the scenario described above segfaults?
>> 2) how can I avoid this? Is it actually possible to use static V8 from
>> within those loadable modules?
>>
>>
>> Thanks,
>> Ondrej Zara
>>
>>
>> --
>> v8-users mailing list
>> [email protected]
>> http://groups.google.com/group/v8-users
>>
>>
>>
>> --
>> v8-users mailing list
>> [email protected]
>> http://groups.google.com/group/v8-users
>>
>
>
> --
> v8-users mailing list
> [email protected]
> http://groups.google.com/group/v8-users
>
>
>  --
> v8-users mailing list
> [email protected]
> http://groups.google.com/group/v8-users
>

-- 
v8-users mailing list
[email protected]
http://groups.google.com/group/v8-users

Reply via email to