Template linker errors with gcc 4.6.3

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

 



Hi

We have a mature project that builds fine with gcc 4.4, but when we build it with gcc 4.6.3 on Ubuntu 12.04 LTS  we get linker errors that are related to templates.

I am finding it difficult to understand the errors.  As a general question, was template processing significantly changed between gcc 4.4 and 4.6 in a way that might cause linker errors?

Here is an example of an error that I am getting:

+ make
g++ -o _gnuRelease/myapp -Wl,-whole-archive,-export-dynamic ../Kernel/_gnuRelease/libKernel.a    -lboost_python-mt-py27 -lpython2.7 -Wl,--no-whole-archive -ldl  
../Kernel/_gnuRelease/libKernel.a(EVD.o): In function `eigSymmetric(Matrix<double> const&, Matrix<double>&, Matrix<double>&, unsigned int)':
EVD.cpp:(.text+0x25a): undefined reference to `Matrix<double>::eye(unsigned int, double)'

Now, the only line of code in eigSymmetric() that calls eye() is:

    int N = a_X.numRows();
    ...
    a_V = Matrix<double>::eye(N);		

so I don't understand why the linker is looking for `Matrix<double>::eye(unsigned int, double)' rather than for `Matrix<double>::eye(int)'.

There are also many other errors:

EVD.cpp:(.text+0x1c6e): undefined reference to `Matrix<std::complex<double> >::Matrix()'
EVD.cpp:(.text+0x1c7d): undefined reference to `Matrix<double>::Matrix()'
EVD.cpp:(.text+0x1f9e): undefined reference to `Matrix<std::complex<double> >::Matrix(unsigned int, unsigned int, std::vector<std::complex<double>, std::allocator<std::complex<double> > > const&, MatrixConst::EOrdering)'
EVD.cpp:(.text+0x1fe5): undefined reference to `Matrix<std::complex<double> > operator*<std::complex<double> >(Matrix<std::complex<double> > const&, Matrix<std::complex<double> > const&)'
EVD.cpp:(.text+0x2006): undefined reference to `Matrix<std::complex<double> > operator-<std::complex<double> >(Matrix<std::complex<double> > const&, Matrix<std::complex<double> > const&)'
EVD.cpp:(.text+0x2080): undefined reference to `Matrix<std::complex<double> >::frob2() const'
<snip>

Any help would be much appreciated.

Best regards

David







[Index of Archives]     [Linux C Programming]     [Linux Kernel]     [eCos]     [Fedora Development]     [Fedora Announce]     [Autoconf]     [The DWARVES Debugging Tools]     [Yosemite Campsites]     [Yosemite News]     [Linux GCC]

  Powered by Linux