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

Błąd podczas linkowania funkcji

Object Storage Arubacloud
0 głosów
108 wizyt
pytanie zadane 16 kwietnia 2019 w C i C++ przez Gryczny Początkujący (320 p.)
edycja 16 kwietnia 2019 przez Gryczny
Chciałem zrobić prostą platformówkę z jedną platformą przy pomocy sfml. W moim poprzednim programie popełniłem błąd polegający na rozpisanie całego kodu programu w jednym pliku (jeśli nie liczyć klas) przez co zrobił się on bardzo rozwlekły. Tym razem chciałem podzielić program na mniejsze części więc dodałem plik funckja_1.h i funkcja_1.cpp zawierające funkcje. W momencie wywołania funkcji w pliku main wyskoczył mi błąd:

undefined reference to `funkcja_1()'

|error: ld returned 1 exit status

Problem nie wynika z problemów z podlinkowaniem biblioteki SFML ponieważ po usunięciu z funkcji do której się odwołuje wszystkich nawiązań do niej błąd wciąż się wyświetla.

 

link do githhuba

https://github.com/gryczan/jump_demo/tree/master/test

 

bulid log

-------------- Clean: Debug in test (compiler: GNU GCC Compiler)---------------

Cleaned "test - Debug"

-------------- Build: Debug in test (compiler: GNU GCC Compiler)---------------

mingw32-g++.exe -Wall -g -I"C:\Users\banga\OneDrive\Pulpit\sfml 2.5\SFML-2.5.1\include" -Iinclude -c C:\Users\banga\OneDrive\Pulpit\test\test\main.cpp -o obj\Debug\main.o
mingw32-g++.exe -Wall -g -I"C:\Users\banga\OneDrive\Pulpit\sfml 2.5\SFML-2.5.1\include" -Iinclude -c C:\Users\banga\OneDrive\Pulpit\test\test\src\blokada.cpp -o obj\Debug\src\blokada.o
mingw32-g++.exe -Wall -g -I"C:\Users\banga\OneDrive\Pulpit\sfml 2.5\SFML-2.5.1\include" -Iinclude -c C:\Users\banga\OneDrive\Pulpit\test\test\src\player.cpp -o obj\Debug\src\player.o
mingw32-g++.exe -L"C:\Users\banga\OneDrive\Pulpit\sfml 2.5\SFML-2.5.1\lib" -o bin\Debug\test.exe obj\Debug\main.o obj\Debug\src\blokada.o obj\Debug\src\player.o   -lmingw32 -luser32 -lgdi32 -lwinmm -ldxguid -lsfml-graphics-d -lsfml-window-d -lsfml-system-d
obj\Debug\main.o: In function `main':
C:/Users/banga/OneDrive/Pulpit/test/test/main.cpp:31: undefined reference to `funkcja_1()'
collect2.exe: error: ld returned 1 exit status
Process terminated with status 1 (0 minute(s), 15 second(s))
2 error(s), 0 warning(s) (0 minute(s), 15 second(s))
komentarz 16 kwietnia 2019 przez adrian17 Ekspert (344,860 p.)
Dla pewności... czy funkcja_1.cpp w ogóle jest kompilowane? Czy jak wpiszesz tam coś bezsensownego, dostajesz błędy kompilacji?
komentarz 16 kwietnia 2019 przez Gryczny Początkujący (320 p.)
funkcja_1.cpp kompiluje się bez problemu. Dodam że plik funkcja_1.cpp i funkcja_1.h nie znajdują się w tym samym pliku.
komentarz 16 kwietnia 2019 przez adrian17 Ekspert (344,860 p.)
Możesz pokazać build log? Wciśnij Rebuild (ctrl+F11), po zakończeniu wejdź na zakładkę Build Log i wrzuć screenshot lub tekst.
komentarz 16 kwietnia 2019 przez Gryczny Początkujący (320 p.)
Dodałem screen bulid loga do pytania.
komentarz 16 kwietnia 2019 przez adrian17 Ekspert (344,860 p.)
Zakładka Build Log, nie Build Messages.

Najlepiej jak wrzucisz tekst.
komentarz 16 kwietnia 2019 przez Gryczny Początkujący (320 p.)
wrzuciłem bulid loga
komentarz 16 kwietnia 2019 przez adrian17 Ekspert (344,860 p.)

cały build log z rebuilda, nie tylko ostatnie pięć linii.

Powinien zacząć się od czegoś w stylu

------------- Build: Debug in test (compiler: GNU GCC Compiler)---------------

 

komentarz 16 kwietnia 2019 przez Gryczny Początkujący (320 p.)
poprawiłem

1 odpowiedź

0 głosów
odpowiedź 16 kwietnia 2019 przez adrian17 Ekspert (344,860 p.)

Dobra.

funkcja_1.cpp kompiluje się bez problemu

Po pierwsze, z logów widać, że kompilator nawet nie próbuje kompilować tego pliku.

Pewnie dlatego, że wyłączyłeś budowanie tego pliku dla wszystkich targetów: http://puu.sh/DfDKJ/2ed5531954.png

Nie wiem jak to zrobiłeś, bo tak szczerze to pierwszy raz widzę to okno w życiu.

Po drugie, ten plik i tak nie ma prawa się skompilować:

#include <main.cpp>
#include <player.>

Te include'y nie mają sensu

    okno.draw(floor.sprite);
    okno.draw(platform.sprite);

A zmiennej `okno` nie ma nigdzie poza wnętrzem main()a.

komentarz 16 kwietnia 2019 przez Gryczny Początkujący (320 p.)
Zniknął poprzedni błąd. Mam jednak kolejny problem. Jak dać funkcji dostęp do obiektów globalnych bez przesyłania ich do niej?
komentarz 16 kwietnia 2019 przez adrian17 Ekspert (344,860 p.)
Jeśli są globalne i zadeklarowane w nagłówku, to powinny być widoczne.

Ale ładniejsze rozwiązanie to: nie powinny być globalne.

Podobne pytania

0 głosów
2 odpowiedzi 159 wizyt
pytanie zadane 29 maja 2016 w C i C++ przez Avernis Nałogowiec (27,400 p.)
0 głosów
1 odpowiedź 210 wizyt
0 głosów
2 odpowiedzi 214 wizyt

92,570 zapytań

141,422 odpowiedzi

319,643 komentarzy

61,958 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!

...