GCC3 - neues Problem



  • Es ist echt zum Erbrechen. Kaum stellt man auf einen neuen g++ um funzt nichts mehr. Beim Versuch mein Programm mit gcc 3 zu erstellen, will er nicht mehr linken.
    Die Fehlermeldungen sind sehr aussagekräftig:

    g++ -o voxfast -L/usr/lib/qt3/lib/ -LFastPic/lib -LFastVox/lib -LUtil/lib -L3rdparty/RLE/lib main.o renderoutput.o mainwindow.o \
    ArrayUCHAR.o ArrayUSHORT.o Bg.o CTwindow.o Cmap.o HSLtoRGB.o Pic16Ref.o Pic8Ref.o PicIo.o PicNRef.o PicIo.o PicNRef.o \
    PicRGBRef.o Picture.o Picture16.o Picture16op.o Picture8.o Picture8op.o PictureMa.o PictureN.o PictureOp.o PictureRGB.o \
    PixBox.o PixBoxOp.o RleIo.o BBox.o Bres3D.o Mat3d.o Slice.o VoxBox.o VoxBoxOp.o VoxDesc.o Voxel.o VoxelGrad.o VoxelMa.o VoxelOp.o \
    dda3d.o C_Str.o Mat.o P3D.o V3D.o -lrle -lqt-mt -lGL -lGLU --verbose-error-messages
    PicIo.o: In function `PicIo::PicIo[not-in-charge]()':
    PicIo.o(.text+0x0): multiple definition of `PicIo::PicIo[not-in-charge]()'
    PicIo.o(.text+0x0): first defined here
    PicIo.o: In function `PicIo::PicIo[in-charge]()':
    PicIo.o(.text+0x18): multiple definition of `PicIo::PicIo[in-charge]()'
    PicIo.o(.text+0x18): first defined here
    ... (Tausend mal ähnliches)
    PicNRef.o(.text+0x320): first defined here
    PicNRef.o: In function `PicNPtr::operator=(PicNPtr const&)':
    PicNRef.o(.text+0x37c): multiple definition of `PicNPtr::operator=(PicNPtr const&)'
    PicNRef.o(.text+0x37c): first defined here
    collect2: ld returned 1 exit status
    make: *** [all] Fehler 1
    

    Beim googlen kam auch wenig Information raus. Irgendwas mit nicht Standard C++ stand da. Mmmh...
    Wer kann helfen?



  • hmm ... dass der PicIO-Konstruktor mehrfach definiert ist kannst du definitiv ausschließen?



  • Ja,

    #ifndef PicIO_h
    #define PicIO_h
    
    #include <stdio.h>
    
    class C_Str;
    class Picture;
    class Picture8;
    class Picture16;
    class PictureN;
    class PictureRGB;
    
    class PicIo
    {
    public:
      PicIo();
    
      virtual int open(char*,char*);
    
      virtual void operator>>(Picture8&);
      virtual void operator<<(const Picture8&);
      virtual void operator>>(PictureN&);
      virtual void operator<<(const PictureN&);
      virtual void operator>>(Picture16&);
      virtual void operator<<(const Picture16&);
      virtual void operator>>(PictureRGB&);
      virtual void operator<<(const PictureRGB&);
    
      virtual Picture* get();
      virtual int put(const Picture*);
    
    protected:
      FILE* fp;
      char modus;
    
    private:
    };
    
    extern PicIo* getPicIo( const C_Str&, char* );
    extern PicIo* getPicIo( char*, char* );
    extern Picture* loadPicture( const C_Str& );
    extern Picture* loadPicture( char* );
    extern int savePicture( Picture*, const C_Str& );
    extern int savePicture( Picture*, char* );
    
    extern Picture16* loadIma( FILE* fptr, int header, int x_res, int y_res );
    
    #endif
    

    Wie gesagt das Problem trat bei gcc 2 nicht auf. PicIo ist nur Basisklasse und implementiert eigentlich nichts. Was hat dieser Fehler zu bedeuten?



  • Du linkst PicIo.o zweimal.



  • Oh Mann ...


Anmelden zum Antworten