I am using snow leopard and the hpc.sourceforge.net compilers (gcc 4.6 
experimental).

Apparently, linking a debug build of libmesh to an object code that uses 
std::stringstream breaks std::stringstream in that object code.  It seems like 
the linker is picking a particular stringstream instantiation from libmesh.a 
rather than the one with the associated object file.  This does not happen with 
an optimized build of libmesh.  It does not present on gcc 4.5 or lower.  The 
bug is extremely easy to replicate.

Given the following source code (which in no way calls libmesh):

#include <sstream>
#include <iostream>
#include <string>

int main ( int argc , char ** argv )
{
  std::string t1 = "hello";
  std::stringstream t2;
  t2 << t1 << " : " << 5;
  std::cout << t2.str() << std::endl;
}

Compiled and run gives (as expected):

billmp1:~ zfw$ /opt/amp/packages/debug/bin/mpicxx t.cc -D_GLIBCXX_DEBUG 
-D_GLIBCXX_DEBUG_PEDANTIC -DDEBUG
billmp1:~ zfw$ ./a.out
hello : 5
billmp1:~ zfw$ 

However, if you link it against libmesh.a, you get:

billmp1:~ zfw$ /opt/amp/packages/debug/bin/mpicxx t.cc -D_GLIBCXX_DEBUG 
-D_GLIBCXX_DEBUG_PEDANTIC -DDEBUG 
/opt/amp/packages/debug/libmesh/lib/i386-apple-darwin10.4.2_dbg/libmesh.a 
/opt/amp/packages/debug/libmesh/contrib/lib/i386-apple-darwin10.4.2_dbg/libexodusii.a
 
/opt/amp/packages/debug/libmesh/contrib/lib/i386-apple-darwin10.4.2_dbg/libgmv.a
 
/opt/amp/packages/debug/libmesh/contrib/lib/i386-apple-darwin10.4.2_dbg/libgzstream.a
 
/opt/amp/packages/debug/libmesh/contrib/lib/i386-apple-darwin10.4.2_dbg/liblaspack.a
 
/opt/amp/packages/debug/libmesh/contrib/lib/i386-apple-darwin10.4.2_dbg/libnemesis.a
 
/opt/amp/packages/debug/libmesh/contrib/lib/i386-apple-darwin10.4.2_dbg/libnetcdf.a
 
/opt/amp/packages/debug/libmesh/contrib/lib/i386-apple-darwin10.4.2_dbg/libparmetis.a
 
/opt/amp/packages/debug/libmesh/contrib/lib/i386-apple-darwin10.4.2_dbg/libmetis.a
 
/opt/amp/packages/debug/libmesh/contrib/lib/i386-apple-darwin10.4.2_dbg/libsfcurves.a
 
/opt/amp/packages/debug/libmesh/contrib/lib/i386-apple-darwin10.4.2_dbg/libtetgen.a
 
/opt/amp/packages/debug/libmesh/contrib/lib/i386-apple-darwin10.4.2_dbg/libtriangle.a
 
/opt/amp/packages/debug/petsc-3.0.0-p12/darwin10.4.2-c-debug/lib/libpetscsnes.a 
/opt/amp/packages/debug/petsc-3.0.0-p12/darwin10.4.2-c-debug/lib/libpetscksp.a 
/opt/amp/packages/debug/petsc-3.0.0-p12/darwin10.4.2-c-debug/lib/libpetscdm.a 
/opt/amp/packages/debug/petsc-3.0.0-p12/darwin10.4.2-c-debug/lib/libpetsccontrib.a
 /opt/amp/packages/debug/petsc-3.0.0-p12/darwin10.4.2-c-debug/lib/libpetscmat.a 
/opt/amp/packages/debug/petsc-3.0.0-p12/darwin10.4.2-c-debug/lib/libpetscvec.a 
/opt/amp/packages/debug/petsc-3.0.0-p12/darwin10.4.2-c-debug/lib/libpetsc.a 
/usr/X11R6/lib/libSM.dylib /usr/X11R6/lib/libICE.dylib 
/usr/X11R6/lib/libX11.dylib -framework Accelerate /usr/lib/libblas.dylib 
/usr/lib/libblas.dylib -lz
billmp1:~ zfw$ ./a.out
hello : 
billmp1:~ zfw$

The output is missing the '5'.  Now, if you take away libmesh.a, you get:

billmp1:~ zfw$ /opt/amp/packages/debug/bin/mpicxx t.cc -D_GLIBCXX_DEBUG 
-D_GLIBCXX_DEBUG_PEDANTIC -DDEBUG 
/opt/amp/packages/debug/libmesh/contrib/lib/i386-apple-darwin10.4.2_dbg/libexodusii.a
 
/opt/amp/packages/debug/libmesh/contrib/lib/i386-apple-darwin10.4.2_dbg/libgmv.a
 
/opt/amp/packages/debug/libmesh/contrib/lib/i386-apple-darwin10.4.2_dbg/libgzstream.a
 
/opt/amp/packages/debug/libmesh/contrib/lib/i386-apple-darwin10.4.2_dbg/liblaspack.a
 
/opt/amp/packages/debug/libmesh/contrib/lib/i386-apple-darwin10.4.2_dbg/libnemesis.a
 
/opt/amp/packages/debug/libmesh/contrib/lib/i386-apple-darwin10.4.2_dbg/libnetcdf.a
 
/opt/amp/packages/debug/libmesh/contrib/lib/i386-apple-darwin10.4.2_dbg/libparmetis.a
 
/opt/amp/packages/debug/libmesh/contrib/lib/i386-apple-darwin10.4.2_dbg/libmetis.a
 
/opt/amp/packages/debug/libmesh/contrib/lib/i386-apple-darwin10.4.2_dbg/libsfcurves.a
 
/opt/amp/packages/debug/libmesh/contrib/lib/i386-apple-darwin10.4.2_dbg/libtetgen.a
 
/opt/amp/packages/debug/libmesh/contrib/lib/i386-apple-darwin10.4.2_dbg/libtriangle.a
 
/opt/amp/packages/debug/petsc-3.0.0-p12/darwin10.4.2-c-debug/lib/libpetscsnes.a 
/opt/amp/packages/debug/petsc-3.0.0-p12/darwin10.4.2-c-debug/lib/libpetscksp.a 
/opt/amp/packages/debug/petsc-3.0.0-p12/darwin10.4.2-c-debug/lib/libpetscdm.a 
/opt/amp/packages/debug/petsc-3.0.0-p12/darwin10.4.2-c-debug/lib/libpetsccontrib.a
 /opt/amp/packages/debug/petsc-3.0.0-p12/darwin10.4.2-c-debug/lib/libpetscmat.a 
/opt/amp/packages/debug/petsc-3.0.0-p12/darwin10.4.2-c-debug/lib/libpetscvec.a 
/opt/amp/packages/debug/petsc-3.0.0-p12/darwin10.4.2-c-debug/lib/libpetsc.a 
/usr/X11R6/lib/libSM.dylib /usr/X11R6/lib/libICE.dylib 
/usr/X11R6/lib/libX11.dylib -framework Accelerate /usr/lib/libblas.dylib 
/usr/lib/libblas.dylib -lz
billmp1:~ zfw$ ./a.out
hello : 5
billmp1:~ zfw$ 

As mentioned above, it does not happen with an optimized version of libmesh:

billmp1:~ zfw$ /opt/amp/packages/debug/bin/mpicxx t.cc 
/opt/amp/packages/optimized/libmesh/lib/i386-apple-darwin10.4.2_opt/libmesh.a 
/opt/amp/packages/debug/libmesh/contrib/lib/i386-apple-darwin10.4.2_dbg/libexodusii.a
 
/opt/amp/packages/debug/libmesh/contrib/lib/i386-apple-darwin10.4.2_dbg/libgmv.a
 
/opt/amp/packages/debug/libmesh/contrib/lib/i386-apple-darwin10.4.2_dbg/libgzstream.a
 
/opt/amp/packages/debug/libmesh/contrib/lib/i386-apple-darwin10.4.2_dbg/liblaspack.a
 
/opt/amp/packages/debug/libmesh/contrib/lib/i386-apple-darwin10.4.2_dbg/libnemesis.a
 
/opt/amp/packages/debug/libmesh/contrib/lib/i386-apple-darwin10.4.2_dbg/libnetcdf.a
 
/opt/amp/packages/debug/libmesh/contrib/lib/i386-apple-darwin10.4.2_dbg/libparmetis.a
 
/opt/amp/packages/debug/libmesh/contrib/lib/i386-apple-darwin10.4.2_dbg/libmetis.a
 
/opt/amp/packages/debug/libmesh/contrib/lib/i386-apple-darwin10.4.2_dbg/libsfcurves.a
 
/opt/amp/packages/debug/libmesh/contrib/lib/i386-apple-darwin10.4.2_dbg/libtetgen.a
 
/opt/amp/packages/debug/libmesh/contrib/lib/i386-apple-darwin10.4.2_dbg/libtriangle.a
 
/opt/amp/packages/debug/petsc-3.0.0-p12/darwin10.4.2-c-debug/lib/libpetscsnes.a 
/opt/amp/packages/debug/petsc-3.0.0-p12/darwin10.4.2-c-debug/lib/libpetscksp.a 
/opt/amp/packages/debug/petsc-3.0.0-p12/darwin10.4.2-c-debug/lib/libpetscdm.a 
/opt/amp/packages/debug/petsc-3.0.0-p12/darwin10.4.2-c-debug/lib/libpetsccontrib.a
 /opt/amp/packages/debug/petsc-3.0.0-p12/darwin10.4.2-c-debug/lib/libpetscmat.a 
/opt/amp/packages/debug/petsc-3.0.0-p12/darwin10.4.2-c-debug/lib/libpetscvec.a 
/opt/amp/packages/debug/petsc-3.0.0-p12/darwin10.4.2-c-debug/lib/libpetsc.a 
/usr/X11R6/lib/libSM.dylib /usr/X11R6/lib/libICE.dylib 
/usr/X11R6/lib/libX11.dylib -framework Accelerate /usr/lib/libblas.dylib 
/usr/lib/libblas.dylib -lz
billmp1:~ zfw$ ./a.out
hello : 5
billmp1:~ zfw$ 

Any ideas on how to remedy this would be greatly appreciated.

Bill Cochran


------------------------------------------------------------------------------
Increase Visibility of Your 3D Game App & Earn a Chance To Win $500!
Tap into the largest installed PC base & get more eyes on your game by
optimizing for Intel(R) Graphics Technology. Get started today with the
Intel(R) Software Partner Program. Five $500 cash prizes are up for grabs.
http://p.sf.net/sfu/intelisp-dev2dev
_______________________________________________
Libmesh-users mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/libmesh-users

Reply via email to