[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Bug#457075: Salomé packaging



Hello Andre,

First, some great news: Salomé was accepted into unstable!  Now we can
file multiple independent bugs and track all of these issues separately.

On Tue, 2010-06-01 at 10:53 +0200, Andre Espaze wrote:
> Hi Adam,
> > 
> > I've installed your patches, but still have the same build error:
> > 
> > ./.libs/libVisuConvertor.so: undefined reference to `vtkIntArray* VISU::GetIDMapper<VISU::TGetPointData>(VISU::TFieldList*, VISU::TGetPointData, char const*)'
> > collect2: ld returned 1 exit status
> > 
> > It seems like if the problem were the missing -L...TOOLSGUI then there
> > would have been a missing library instead of a missing symbol...  But
> > then, you were able to get it to build with these changes, so there must
> > be something I don't understand going on here.
> > 
> > I did install your patches in pieces, not all at once, so I may have
> > missed something.  Can you compare the tree currently in git with your
> > own, to see if there are some significant differences which would cause
> > it to not build?
> I feel really sorry for the wrong patch that I sent you, the reason
> is that I forgot to add the CXXFLAGS="-g" in the configure command, I was
> building VISU without optimizations. I hope that I did not make you
> loose too much time.

Aha!  That makes a lot of sense.  Don't worry, it didn't take me a lot
of time to rebuild the package a couple of times.

But this suggests that it might be best to compile only that file using
-g so the rest of VISU can still be optimized.  What do you think?

> Since my last successful build, I have looked
> deeper into the problem and I found that g++ inline small template
> function with -O2. Here I imitate the GetIDMapper definition found in
> src/CONVERTOR/VISU_MergeFilterUtilities.cxx:705:
> 
>     $ cat test.cpp
>     class Data{
>     };
> 
>     template <class TData>
>     void
>     GetIDMapper(TData data)
>     {
>     }
> 
>     void test(void)
>     {
>         GetIDMapper(Data());
>     }
> 
> When compiling without optimizations, the GetIDMapper symbol is built:
> 
>     $ g++ -c test.cpp && readelf -s test.o | grep GetIDMapper
>     ... _Z11GetIDMapperI4DataEvT_
> 
> However -O2 will inline the template function:
> 
>     $ g++ -O2 -c test.cpp && readelf -s test.o | grep GetIDMapper
> 
> For not loosing optimizations on the whole build, I have finally
> found that I can control g++:
>  
>     $ cat test.cpp
>     class Data{
>     };
> 
>     template <class TData>
>     __attribute__((noinline))
>     void
>     GetIDMapper(TData data)
>     {
>     }
> 
>     void test(void)
>     {
>         GetIDMapper(Data());
>     }
>     $ g++ -O2 -c test.cpp && readelf -s test.o | grep GetIDMapper
>     ... _Z11GetIDMapperI4DataEvT_

Very interesting!  It sounds like with a lot of hard work you've found
an important g++ optimization bug...

> So the good new is that I will provide a VISU patch and we can again
> configure VISU in the for loop of debian/rules. Will it be possible
> to reset the last commit? I deeply apologize for my mistake.  For not
> reproducing the same problem, I am going to build a new Salome version
> and send you patches carefully once everything works.

Sounds good, thank you.

> By the way, is the 'git-builpackage' command that exports CXXFLAGS
> to '-O2 -g'? I could not yet understand that step.

I believe dpkg-buildpackage sets those flags.  But it should be possible
to set them locally within debian/rules or Makefile.am.

Regards,
Adam
-- 
GPG fingerprint: D54D 1AEE B11C CE9B A02B  C5DD 526F 01E8 564E E4B6

Engineering consulting with open source tools
http://www.opennovation.com/

Attachment: signature.asc
Description: This is a digitally signed message part


Reply to: