CVS build error with new sort
Thomas Treichl
Thomas.Treichl at gmx.net
Wed Feb 13 14:10:54 CST 2008
John W. Eaton schrieb:
> On 12-Feb-2008, John Swensen wrote:
>
> |
> | On Feb 12, 2008, at 3:45 PM, John W. Eaton wrote:
> |
> | > Hmm. I don't think the explicit instantiations in this file should
> | > actually be needed. I committed the following change. If you update,
> | > does it work now, or do you still see multiple definitions for some
> | > symbols?
> | >
> | > Thanks,
> | >
> | > jwe
> | >
> | >
> |
> | That fixed some of them. I don't get the same error now, but I still
> | get a linker error when linking liboctave.dylib
> |
> | ld: duplicate symbol Array<long long>::ArrayRep::length() constin pic/
> | Array-so.o and pic/Array-i.o
> |
> | I didn't include the nm output, grepping for ArrayRep, because it is
> | very, very long.
> |
> | Let me know if seeing it will help you figure out where this one is
> | doubly-defined.
>
> My guess is that this happens because on your system, std::streamoff
> is a typedef for "long long int". You can probably avoid the problem
> by commenting out the line
>
> INSTANTIATE_ARRAY_AND_ASSIGN (std::streamoff, OCTAVE_API);
>
> in liboctave/Array-so.cc.
>
> If it is a typedef problem, then how can we detect automatically at
> configure time so we can avoid the bug?
>
> BTW, I think this doesn't happen on my system because template
> instantiations produce "weak" symbols. If there are multiple weak
> symbols with the same name, the linker then uses only one and doesn't
> issue the error message you see.
You're right, if I comment out INSTANTIATE_ARRAY_AND_ASSIGN (std::streamoff,
OCTAVE_API); in Array-so.cc then linking can be done. I hope this also solves
all problems on John's Mac?
However, I currently cannot imagine how such a detection could be done. Every
tip would be greatly helpful here.
Thomas
More information about the Octave-maintainers
mailing list