Duplicate symbol for architecture x86_64 – narzędzie wskazujące w którym miejscu jest błąd

0

Przy tworzeniu projektu notorycznie otrzymuje błąd duplicate symbol for architecture x86_64. Czy istnieje jakieś narzędzie, które wskaże mi, w którym dokładnie miejscu zachodzi powyższy błąd? Przeszukałem wszystkie pliki projektu i nic nie znalazłem, jakaś randomowa zmiana kolejności wpisów w .pro przyniosła efekt na dwa budowania i problem powrócił.

0

kompilator/linker podaje pełną wymaganą informację w takich wypadkach (clang jest w tym szczególnie dobry).
Na pewno masz informacje, gdzie są oba egzemplarze zduplikowanego symbolu.

Stawiam na popsuty plik nagłówkowy.

0

Jasne, że mam. Natomiast wskazuje mi to dwa pliki, w których nie widzę kompletnie tego problemu.

duplicate symbol __Z8getMonthRKNSt3__112basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEE in:
    format.o
    date.o

przed dodaniem do projektu format.h i format.cpp problem nie występował. Include są następujace(plik, include):
month.h - string
month.cpp - month.h
months.h -month.h I array
date.h - months.h
date.cpp - date.h
format.h - date.h
format.cpp - format.h

e: hierarchia dołączeń pokazuje mi czytelnie i nie widzę tam błędu.

2

Mi clang w takich wpadkach podaje dokładnie linie, w której symbol został zdefiniowany, więc zapewne nie wkleiłeś wszystkiego co jest przydatne.
A problemem jest

getMonth(const std::string&);

http://demangler.com/
Pewnie zdefiniowałeś go w pliku nagłówkowym, który jest dołączany zarówno do format.cpp i date.cpp.
Przenieś definicje do pliku cpp, albo dodaj słowo kluczowe inline.

0

Dziękuje bardzo!: )

Swoją drogą, odczytałes z tego:

__Z8getMonthRKNSt3__112basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEE in:

pełną nazwę metody? :O

2
Tenonymous napisał(a):

Dziękuje bardzo!: )

Swoją drogą, odczytałes z tego:

__Z8getMonthRKNSt3__112basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEE in:

pełną nazwę metody? :O

Można też użyć narzędzia c++filt i odczytać tak (usunąłem wiodący _).

[pkw@pkwcent ~]$ c++filt _Z8getMonthRKNSt3__112basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEE

i uzyskać:
getMonth(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&)

1 użytkowników online, w tym zalogowanych: 0, gości: 1