On 2013-06-26 01:55, Michael Gmelin wrote:
...
The problem is that static initialization happens in the expected
order (same translation unit), but termination does *not* happen in the
reverse order of initialization, which - according to the C++ standard
section 3.6.3 should be guaranteed:

"If the completion of the constructor or dynamic initialization of an
object with static storage duration is sequenced before that of
another, the completion of the destructor of the second is sequenced
before the initiation of the destructor of the first."

The following conditions have to be met in order to show the problem:

1. Two static objects defined in the translation unit containing main
2. Definition of one of the underlying objects is in a separate
    source which is used to build a shared library
3. Both, the translation unit containing main an the one forming the
    shared library are compiled using -fPIC (or -fpic).

Strange, if you compile the main program without -fPIC, the testcase
works correctly.  Normally, there should never be a need to compile a
normal executable with -fPIC, but it should not break anything either.

I am not sure what causes this, but I will investigate.  For now, the
workaround is to compile only shared objects with -fPIC.

-Dimitry
_______________________________________________
freebsd-ports@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/freebsd-ports
To unsubscribe, send any mail to "freebsd-ports-unsubscr...@freebsd.org"

Reply via email to