On 2004-01-02, Matthew Wilcox wrote:
> I would say that audacity should be compiled with LFS support too.
> Suppose on x86 it attempts to deal with a file sized more than 2GB?

The binaries are correct on x86 because the sources are using the opaque
type off_t.

I think now I know what the problem is:

On x86 is
        int == long < long long
but on ia64 is
        int < long == long long .

Unfortunately for C++ is long != long long even on ia64 because of
static type checking. The compiler that compiled the binaries in the
Debian archive translated off_t into long long but the compiler on my
ia64 machine compiles off_t into long. Linking is no longer possible.

        $ cat x.cc
        #include <sys/types.h>
        void x(off_t) {}
        void y(long) {}
        void z(long long) {}
        $ nm x.o | c++filt
        0000000000000000 T x(long)
        0000000000000020 T y(long)
        0000000000000040 T z(long long)
        $ nm x.o
        0000000000000000 T _Z1xl
        0000000000000020 T _Z1yl
        0000000000000040 T _Z1zx

All three functions have an int argument with 64 bit size but only the
first 2 functions have the same C++ linkage.

Maybe it is not the compiler but the C library that causes that error.

Torsten


Reply via email to