[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

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: