Re: Multiple definition error with some compilers
Ingvarr Zhmakin wrote:
> Доброе утро.
>
> > > ===
> > > virssmaa.o: In function `std::string::_Rep::_M_refdata()':
> > > virssmaa.o(.text+0x3680): multiple definition of `std::string::_Rep::_M_refdata()'
> > > BasicDomain.o(.text+0x1900): first defined here
> > > collect2: ld returned 1 exit status
> > > ===
> > > Замечено: оба цепепешника, из которых эти объектники сделаны, включают
> > > <string>.
> > Сделай минимальный исходник, на котором проявляется баг и запости его сюда.
> Хорошо, кину.
>
> > А также расскажи, какие у тебя версии g++ и libstdc++ (точно, а не "3.0") и откуда ты их взял. Скорее
> > всего, твоя проблема решается апгрейдом STL (libstdc++).
> Всё взято с ftp.*.debian.org:
> ===
> ii cpp-3.0 3.0-0pre010403 The GNU C preprocessor.
> ii cpp-3.0-doc 3.0-0pre010403 Documentation for the GNU C preprocessor (cp
> ii fastjar 3.0-0pre010403 Jar creation utility
> ii fixincludes 3.0-0pre010403 Fix header files
> ii g++-3.0 3.0-0pre010403 The GNU C++ compiler.
> ii gcc-3.0 3.0-0pre010403 The GNU C compiler.
> ii gcc-3.0-base 3.0-0pre010403 The GNU compiler collection (base package).
> ii gcc-3.0-doc 3.0-0pre010403 Documentation for the GNU compilers (gcc, go
> ii libgcc300 3.0-0pre010403 Shared libgcc.
> ii libstdc++3.0 3.0-0pre010403 The GNU stdc++ library version 3
> ii libstdc++3.0-d 3.0-0pre010403 The GNU stdc++ library version 3 (developmen
> ii libstdc++3.0-d 3.0-0pre010403 The GNU stdc++ library version 3 (documentat
> ii protoize 3.0-0pre010403 Create/remove ANSI prototypes from C code
> ===
> Только вот насчет того, что это решается апгрейдом...
> Я ж говорю -- с Каи (вылизанной версией, с которой все их примеры компилировались на ура) было похожее.
> Это какое-то глобальное явление -- невосприятие линкером объектников...
Хм, странно у меня с этой версией все ОК линковалось. Я надеюсь, ты пользуешься веткой woody, раз у тебя
такие версии gcc и STL? А может тебе binutils проапгрейдить?
Можно попробовать проапгрейдить GCC до версии pre010801 из нестабильной ветки (при помощи wget+dpkg (или
можно еще как-то не добавляя нестабильную ветку в apt-sources?)). Вообще, та версия которая у тебя
(pre010403) у меня половину исходников не компилировала, которые 2.95 переваривал (internal compiler error
был). А версия pre010727 вообще не работала. А вот pre010801 (вчера поставил) вроде получше будет.
Еще можно попробовать проапгрейдить libc6 (это скорее всего ничего не даст, но gcc почему-то от нее
зависит).
Еще можно поставить gcc и STL релизные из .tar.bz2 c ftp://gcc.gnu.org.
Еще можно пользоваться таким известным фокусом (хотя, скорее всего тоже не поможет, так как этот баг
только на двух (и больше) файлах проявляется):
#ifndef STRING_INCLUDED
#define STRING_INCLUDED
#include <string>
#endif
А может у тебя там какие-то хитрые ключики для линкера стоят?
Reply to: