• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Kompilator zwraca "multiple definition of main" przy jednokrotnej definicji funkcji main

Object Storage Arubacloud
0 głosów
134 wizyt
pytanie zadane 18 listopada 2020 w C i C++ przez Lyokoheros Początkujący (340 p.)

Pracuję nad pewnym projektem w Qt Creatorze i mam go już prawie ukończonego, ale gdy próbowałem skompilować pojawił mi się dziwny błąd: 

main.o: in function std::abs(long double)': /home/ubuntu/Desktop/MetodaBairstowa/interval.h:880: error: multiple definition of main'; main.o:/home/ubuntu/Desktop/build-Bairstow-Desktop-Debug/../MetodaBairstowa/main.cpp:12: first defined here
/home/ubuntu/Desktop/MetodaBairstowainterval.h
cannot find -lBoost
collect2: error: ld returned 1 exit status

Sprawdziłem i w build-Bairstow-Deskto-Debug przypałętał się drugi plik main.o (tylko że z dużej litery Main.o), jednak że po tym jak wyczyściłem zawartość tego folderu, użyłem clean all i rebuild w moim IDE, spróbowałem skompilować raz jeszcze i... znów pojawił się błąd tylko minimalnie inny: 

main.o: in function std::abs(long double)': /home/ubuntu/Desktop/MetodaBairstowa/interval.h:880: error: multiple definition of main'; main.o:/home/ubuntu/Desktop/build-Bairstow-Desktop-Debug/../MetodaBairstowa/main.cpp:12: first defined here
file not found: /home/ubuntu/Desktop/MetodaBairstowa/interval.h
cannot find -lBoost
collect2: error: ld returned 1 exit status

Ktoś wie jak rozwiązać ten problem/czego jeszcze mógłbym spróbować? 

Jakby co repozytorium z całym projektem jest tu.

1 odpowiedź

+1 głos
odpowiedź 18 listopada 2020 przez TOM_CPP Pasjonat (22,640 p.)

W pliku Bairstow.pro masz dodane podwójnie main.cpp :

SOURCES += \
    main.cpp \
    main.cpp \
    mywidget.cpp \
    solver.cpp \
    solverinterval.cpp

następnie plik ten jest podwójnie kompilowany, co doprowadza do błędu na etapie linkowania : error: multiple definition of main

komentarz 18 listopada 2020 przez Lyokoheros Początkujący (340 p.)

Faktycznie to było przyczyną. Ale nadal miałem ten ostatni błąd:

cannot find -lBoost

W sumie z tego co wyczytałem to ten właśnie przełącznik (-lBoost) był raczej niepotrzebny (właściwie to jego formę wczesniej wydedukowalem z materiałów jakie o Booście znalazłem i wygląda na to, że błędnie) bo używana przeze mnie biblioteka - boost/lexicalcast.hpp -  jest typu header only.

Jednak gdy go usunąłem to zaczęły mi nowe błędy wyskakiwać, tym razem z mpfra (który też jest przez bibiotekę interval.h wykorzystywany)

error: main.o: in function `interval_arithmetic::Interval<long double>::IntRead(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)':
/home/ubuntu/Desktop/MetodaBairstowa/interval.h:264: error: undefined reference to `mpfr_init2'
error: /home/ubuntu/Desktop/build-Bairstow-Desktop-Debug/../MetodaBairstowa/interval.h:265: undefined reference to `mpfr_set_str'
error: /home/ubuntu/Desktop/build-Bairstow-Desktop-Debug/../MetodaBairstowa/interval.h:268: undefined reference to `mpfr_get_ld'
error: /home/ubuntu/Desktop/build-Bairstow-Desktop-Debug/../MetodaBairstowa/interval.h:271: undefined reference to `mpfr_get_d'
[...i jeszcze kilka podobnych]

I nie mogę odnaleźć przyczyn :(

komentarz 19 listopada 2020 przez TOM_CPP Pasjonat (22,640 p.)

Błąd jest spowodowany niepoprawnym dołączeniem biblioteki mpfr używanej w interval.h. Wygląda na to że załączany jest tylko sam nagłówek, a system nie jest w stanie znaleźć odpowiednich bibliotek (prawdopodobnie trzeba będzie je ręcznie dodać do pliku Bairstow.pro) . Poczytaj instalacja MPFR

 

komentarz 19 listopada 2020 przez Lyokoheros Początkujący (340 p.)
Hm... wyszło na to, że musiałem dodać do INCLUDEPATH i LIBS ścieżkę "/usr/include"... ale wtedy z kolei mi cstdlib zaczął wywalać błędy(konkretnie to "stdlib.h: No such file or directory"... wewnątrz cstdliba)

Podobne pytania

0 głosów
1 odpowiedź 416 wizyt
pytanie zadane 20 czerwca 2020 w C i C++ przez NieMaJuzNazw Użytkownik (890 p.)
0 głosów
2 odpowiedzi 1,294 wizyt
pytanie zadane 5 grudnia 2018 w C i C++ przez Czapa10 Nowicjusz (180 p.)
–2 głosów
1 odpowiedź 140 wizyt
pytanie zadane 22 marca 2018 w C i C++ przez Hiskiel Pasjonat (22,830 p.)

92,632 zapytań

141,500 odpowiedzi

319,879 komentarzy

62,012 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...