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

[C++] Kompilacja poprawnie działającego programu w systemie Windows na systemie Linux

Aruba Cloud - Virtual Private Server VPS
0 głosów
549 wizyt
pytanie zadane 6 maja 2016 w C i C++ przez plkpiotr Stary wyjadacz (12,420 p.)
edycja 6 maja 2016 przez plkpiotr

Dzień dobry! Choć właściwie to dobry wieczór smiley

Napisałem poprawnie kompilujący się kod w systemie Windows, jednak nie można programu uruchomić na Linuksie. Kod znajduje się w plikach macierze.h, macierze.cpp oraz main.cpp.

Napisałem makefile, który wygląda następująco:
 

macierze: main.o macierze.o
	g++ -o macierze main.o macierze.o
main.o : main.cpp
	g++ -cpp main.cpp
macierze.o: macierze.cpp macierze.h
	g++ -cpp macierze.cpp
clean:
	rm -f core macierze main.o macierze.o

Kompilator wyrzuca mi masę błędów:


g++ -cpp main.cpp
g++: unrecognized option '-cpp'
/tmp/ccnFqTSj.o: In function `main':
main.cpp:(.text+0x17e): undefined reference to `Macierz::Macierz(int, int)'
main.cpp:(.text+0x191): undefined reference to `Macierz::Macierz(Macierz&)'
main.cpp:(.text+0x1a2): undefined reference to `Wektor::Wektor(int)'
main.cpp:(.text+0x1b5): undefined reference to `Wektor::Wektor(Wektor&)'
main.cpp:(.text+0x1c8): undefined reference to `Wektor::Wektor(Wektor&)'
main.cpp:(.text+0x1db): undefined reference to `Wektor::Wektor(Wektor&)'
main.cpp:(.text+0x1ee): undefined reference to `wielkosc(Wektor, Wektor)'
main.cpp:(.text+0x1fd): undefined reference to `Wektor::~Wektor()'
main.cpp:(.text+0x227): undefined reference to `Wektor::~Wektor()'
main.cpp:(.text+0x246): undefined reference to `Wektor::~Wektor()'
main.cpp:(.text+0x270): undefined reference to `Wektor::~Wektor()'
main.cpp:(.text+0x2cd): undefined reference to `operator>>(std::basic_istream<char, std::char_traits<char> >&, Wektor&)'
main.cpp:(.text+0x2fa): undefined reference to `operator>>(std::basic_istream<char, std::char_traits<char> >&, Wektor&)'
main.cpp:(.text+0x318): undefined reference to `operator<<(std::basic_ostream<char, std::char_traits<char> >&, Wektor const&)'
main.cpp:(.text+0x334): undefined reference to `operator<<(std::basic_ostream<char, std::char_traits<char> >&, Wektor const&)'
main.cpp:(.text+0x3a7): undefined reference to `Wektor::operator[](int)'
main.cpp:(.text+0x3be): undefined reference to `operator<<(std::basic_ostream<char, std::char_traits<char> >&, Wektor const&)'
main.cpp:(.text+0x414): undefined reference to `Wektor::operator*(int)'
main.cpp:(.text+0x425): undefined reference to `operator<<(std::basic_ostream<char, std::char_traits<char> >&, Wektor const&)'
main.cpp:(.text+0x459): undefined reference to `operator<<(std::basic_ostream<char, std::char_traits<char> >&, Wektor const&)'
main.cpp:(.text+0x472): undefined reference to `Wektor::~Wektor()'
main.cpp:(.text+0x49c): undefined reference to `Wektor::~Wektor()'
main.cpp:(.text+0x4c5): undefined reference to `Wektor::Wektor(Wektor&)'
main.cpp:(.text+0x4df): undefined reference to `Wektor::operator+(Wektor)'
main.cpp:(.text+0x4f0): undefined reference to `operator<<(std::basic_ostream<char, std::char_traits<char> >&, Wektor const&)'
main.cpp:(.text+0x50c): undefined reference to `operator<<(std::basic_ostream<char, std::char_traits<char> >&, Wektor const&)'
main.cpp:(.text+0x528): undefined reference to `operator<<(std::basic_ostream<char, std::char_traits<char> >&, Wektor const&)'
main.cpp:(.text+0x541): undefined reference to `Wektor::~Wektor()'
main.cpp:(.text+0x56b): undefined reference to `Wektor::~Wektor()'
main.cpp:(.text+0x58a): undefined reference to `Wektor::~Wektor()'
main.cpp:(.text+0x5b4): undefined reference to `Wektor::~Wektor()'
main.cpp:(.text+0x5dd): undefined reference to `Wektor::Wektor(Wektor&)'
main.cpp:(.text+0x5f7): undefined reference to `Wektor::operator-(Wektor)'
main.cpp:(.text+0x608): undefined reference to `operator<<(std::basic_ostream<char, std::char_traits<char> >&, Wektor const&)'
main.cpp:(.text+0x624): undefined reference to `operator<<(std::basic_ostream<char, std::char_traits<char> >&, Wektor const&)'
main.cpp:(.text+0x640): undefined reference to `operator<<(std::basic_ostream<char, std::char_traits<char> >&, Wektor const&)'
main.cpp:(.text+0x659): undefined reference to `Wektor::~Wektor()'
main.cpp:(.text+0x683): undefined reference to `Wektor::~Wektor()'
main.cpp:(.text+0x6a2): undefined reference to `Wektor::~Wektor()'
main.cpp:(.text+0x6cc): undefined reference to `Wektor::~Wektor()'
main.cpp:(.text+0x6f5): undefined reference to `Wektor::Wektor(Wektor&)'
main.cpp:(.text+0x708): undefined reference to `Wektor::operator*(Wektor)'
main.cpp:(.text+0x71f): undefined reference to `operator<<(std::basic_ostream<char, std::char_traits<char> >&, Wektor const&)'
main.cpp:(.text+0x73b): undefined reference to `operator<<(std::basic_ostream<char, std::char_traits<char> >&, Wektor const&)'
main.cpp:(.text+0x76f): undefined reference to `Wektor::~Wektor()'
main.cpp:(.text+0x799): undefined reference to `Wektor::~Wektor()'
main.cpp:(.text+0x7c2): undefined reference to `Wektor::Wektor(Wektor&)'
main.cpp:(.text+0x7d5): undefined reference to `Wektor::operator==(Wektor)'
main.cpp:(.text+0x7ef): undefined reference to `operator<<(std::basic_ostream<char, std::char_traits<char> >&, Wektor const&)'
main.cpp:(.text+0x80b): undefined reference to `operator<<(std::basic_ostream<char, std::char_traits<char> >&, Wektor const&)'
main.cpp:(.text+0x832): undefined reference to `Wektor::~Wektor()'
main.cpp:(.text+0x85c): undefined reference to `Wektor::~Wektor()'
main.cpp:(.text+0x894): undefined reference to `Wektor::Wektor(Wektor&)'
main.cpp:(.text+0x8a7): undefined reference to `Wektor::operator!=(Wektor)'
main.cpp:(.text+0x8c1): undefined reference to `operator<<(std::basic_ostream<char, std::char_traits<char> >&, Wektor const&)'
main.cpp:(.text+0x8dd): undefined reference to `operator<<(std::basic_ostream<char, std::char_traits<char> >&, Wektor const&)'
main.cpp:(.text+0x904): undefined reference to `Wektor::~Wektor()'
main.cpp:(.text+0x92e): undefined reference to `Wektor::~Wektor()'
main.cpp:(.text+0x964): undefined reference to `operator<<(std::basic_ostream<char, std::char_traits<char> >&, Wektor const&)'
main.cpp:(.text+0x980): undefined reference to `operator<<(std::basic_ostream<char, std::char_traits<char> >&, Wektor const&)'
main.cpp:(.text+0x9a0): undefined reference to `Wektor::Wektor(Wektor&)'
main.cpp:(.text+0x9ba): undefined reference to `Wektor::operator+=(Wektor)'
main.cpp:(.text+0x9cb): undefined reference to `operator<<(std::basic_ostream<char, std::char_traits<char> >&, Wektor const&)'

i wiele podobnych...

Co może być tego przyczyną - czy bez wnikania w kod można coś wywnioskować? Braki wiedzy w programowaniu obiektowym, niepoprawność makefile, czy może coś innego.
Proszę o pomoc i wyrozumiałość...

1 odpowiedź

+1 głos
odpowiedź 6 maja 2016 przez draghan VIP (106,230 p.)
wybrane 6 maja 2016 przez plkpiotr
 
Najlepsza

Niepoprawny makefile.

Używaj opcji -c (compile) dla kompilowania plików źródłowych.

macierze: main.o macierze.o
	g++ -o macierze main.o macierze.o
main.o : main.cpp
	g++ -c main.cpp
macierze.o: macierze.cpp macierze.h
	g++ -c macierze.cpp
clean:
	rm -f core macierze main.o macierze.o

 

komentarz 6 maja 2016 przez plkpiotr Stary wyjadacz (12,420 p.)

Tym razem kompilator wyrzuca coś takiego:
 

makefile:2: *** missing separator.  Stop.

Co zrobiłem nie tak?

1
komentarz 6 maja 2016 przez draghan VIP (106,230 p.)
Polecenia kompilatora muszą zaczynać się tabulatorem, ten edytor zamienia tabulację na spacje. Popraw wszędzie tabulacje i powinno śmigać.
komentarz 6 maja 2016 przez plkpiotr Stary wyjadacz (12,420 p.)
Dziękuję serdecznie! :)
Faktycznie, zapomniałem o tabulacji ;)
komentarz 6 maja 2016 przez draghan VIP (106,230 p.)
Działa? :)
komentarz 6 maja 2016 przez plkpiotr Stary wyjadacz (12,420 p.)
Tak jest, wszystko działa poprawnie :D
1
komentarz 6 maja 2016 przez draghan VIP (106,230 p.)
Super. :) Pozdrawiam.

Podobne pytania

0 głosów
1 odpowiedź 986 wizyt
pytanie zadane 15 października 2016 w C i C++ przez krolkoreipolnocnej Nowicjusz (240 p.)
+1 głos
2 odpowiedzi 683 wizyt
pytanie zadane 8 kwietnia 2021 w C i C++ przez believer88 Nowicjusz (240 p.)
0 głosów
0 odpowiedzi 569 wizyt
pytanie zadane 30 kwietnia 2021 w C i C++ przez believer88 Nowicjusz (240 p.)

93,329 zapytań

142,323 odpowiedzi

322,400 komentarzy

62,662 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

Wprowadzenie do ITsec, tom 1 Wprowadzenie do ITsec, tom 2

Można już zamawiać dwa tomy książek o ITsec pt. "Wprowadzenie do bezpieczeństwa IT" - mamy dla Was kod: pasja (użyjcie go w koszyku), dzięki któremu uzyskamy aż 15% zniżki! Dziękujemy ekipie Sekuraka za fajny rabat dla naszej Społeczności!

...