Clark Milliken wrote:
> ef88b09c _init (0, 1, 1c, fab91048, 20000000, 40000000) + 1e0
> ff3c0254 call_init (400000, 80000, ff3ee7c4, fab91118, ffffffff, 0) + 1a8
> ff3c56d4 dlmopen_intn (ff3ee0c4, af450, c01, feef0e78, 0, 0) + 80
> ff3c5818 dlmopen_check (ff3ee0c4, af450, 1, feef0e78, ffbfd8dc, ffbfe098) +
> 134
> ff3c58d4 dlopen (af450, 1, 0, f681e108, 32793c, 0) + ac
The dlopen() call is executing your .init code (running constructors).
I guess a simple C++ a.out that dlopen'd your object would fall over
in the same manner.
> Compile flags (CC):-Dsolaris -features=no%localfor -pta -KPIC -mt
> Link (done with CC) flags:-G -z text -dy -B symbolic -Dsolaris
> -features=no%localfor -pta -KPIC -mt -lCstd -lm
^^^^^^^^^^^
The C++ folks don't like the -Bsymbolic option. It can result in multiple
instances of the same symbol being bound to from different objects
within the process. The implementation details of many aspects of
C++ expect multiple instances of their symbols to be interposed
upon - ie. one symbol definition wins.
What happens if you remove the -Bsymbolic.
Alternative ways of reducing symbol scope in C++ exist, although the
C++ documentation used to be rather sparse in such details. Try:
http://blogs.sun.com/roller/page/rie?entry=interface_creation_using_the_compilers
--
Rod