* Jonathan Lee, on 13.07.2010 16:41:
Problem (C) is outside the realm of the C++ standard, since the C++ standard
doesn't support shared libraries, and I've never actually used *nix shared
libraries so I don't /know/...

Is such dynamic initialization guaranteed?


Not guaranteed, though I think there's a combination of dlopen options
and gcc command line parameters that invoke this behavior. See the
second page of

    http://www.linuxjournal.com/article/3687

about auto-registration.

Personally, though, it never worked for me :/

Ah, well. :-( Thanks for the info! OK, I'll just have to replace the auto-registration with some C++ magic. For which I think I'll simply /require/ that the compiler supports mixing of C and C++ linkage, that is, that ...


<code language="Not quite standard C++!">
    #include <iostream>

    extern "C"
    {
        typedef int (*Callback)( int );
    }

    void foo( Callback f ) { std::cout << "foo!" << f( 42 ) << std::endl; }

    int a( int ) { return 1; }
    extern "C" int b( int ) { return 2; }

    int main()
    {
        foo( a );       // Unholy Mix of C++ and C linkage, formally not OK.
        foo( b );       // Should be OK with any compiler.
    }
</code>


... compiles, and works.


Cheers, & thanks,

- Alf

--
blog at <url: http://alfps.wordpress.com>
--
http://mail.python.org/mailman/listinfo/python-list

Reply via email to