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 ...