Cpp + Python: static data dynamic initialization in *nix shared lib?

Alf P. Steinbach /Usenet alf.p.steinbach+usenet at gmail.com
Tue Jul 13 15:53:09 EDT 2010


* 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>


More information about the Python-list mailing list

AltStyle によって変換されたページ (->オリジナル) /