
On Monday 14 May 2007 22:51:18 Piyo wrote:
Assume that you have multiple developers developing plugins for a commercial package and that we recently deployed boost 1.34 to our facility. For some informed developers, they will switch over to 1.34 whereas others might not know and stick with 1.33.1 or even 1.32. Now imagine loading in all these plugins into the 3rd party app, wouldn't there be some sort of symbol problems especially with boost run-time libraries (take the regex library for example) ??
This is not specific to Boost at all. The point is that as soon as your plugin's interface depends on the version of another library you can't reliably use a different version thereof. What does that mean in practice? Example 1, working: //interface void function(); //implementation void function() { // use Boost here } Example 2, not working: //interface void function( boost::function0<void> fn); //implementation void function( boost::function0<void> fn) { // use Boost here } The reason this doesn't work is that different Boost versions have different implementations of boost::function. As already said, this not only affects Boost, but also other libraries. For example if you replace the native standard library with a newer version, or with STLport, or if you then use the diagnostic version (special debug mode) you each time get different implemetations for std::string. Also, of course, the used compiler and possibly its settings make a difference. Uli