Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

[C++] Na czym polega linkowanie

Ostatnio zmodyfikowano 2017-01-18 15:50
Autor Wiadomość
moler
Temat założony przez niniejszego użytkownika
[C++] Na czym polega linkowanie
» 2017-01-18 13:08:58
Witam, wcześniej uczyłem się programowania w Javie, jednak teraz przeniosłem się na C++ i spotkałem się z takim pojęciem jak linkowanie. Wiem, że chodzi mniej więcej o to, że rozkładamy program na 3 pliki i potem za pomocą #include je linkujemy. Jednak mógłby ktoś wyjaśnić, na czym to dokładniej polega?
P-156580
DejaVu
» 2017-01-18 14:35:32
W dużym przybliżeniu:

W wyniku kompilacji dostajesz pliki pośrednie, które zawierają kod w postaci binarnej dla poszczególnych funkcji itp.
W wyniku linkowania łączysz te wszystkie pliki pośrednie w jeden program. Jeżeli Twój projekt zależy od bibliotek tzw. 3rd-party (czyli np. biblioteka do obsługi sieci, grafiki, dźwięku itp) to wówczas musisz powiedzieć linkerowi w jakiej bibliotece znajduje się kod, od którego zależy Twój program.

Jeżeli nie podasz bibliotek od których zależy Twój program to linker nie będzie wiedział co powinno się wykonać aby osiągnąć zamierzony efekt, bo po prostu nie będzie znał implementacji do tego, aby np. odtworzyć dźwięk. Tym samym linker nie dopuści do zbudowania kodu i rzuci błędami, ponieważ wszystkie wywołania funkcji/metod itp muszą być znane w chwili linkowania aplikacji, aby aplikacja mogła działać poprawnie.

/edit:
Jeżeli chcesz wiedzieć dokładniej co się dzieje w procesie kompilacji kodu C++ to proponuję przeczytać temat:
http://stackoverflow.com​/questions/6264249​/how-does-the-compilation-linking-process-work
P-156583
mateczek
» 2017-01-18 15:22:25
"include" to dołączenie źródeł do jednostki kompilacji.

Linkowanie to łączenie skompilowanych modułów w cały program.
Załóżmy, że mamy trzy pliki: "klasa.h", "klasa.cpp" i "main.cpp"

kompiluje się plik klasa.cpp do pliku kasa.o
kompiluje się plik main.cpp do pliku main.o

z dwóch powyższych plików o rozszerzeniu "*.o" w wyniku linkowania dostajemy program "main.exe" uruchamiany bezpośrednio na procesorze i korzystający z funkcji systemu operacyjnego.

Linkowanie z bibliotekami to kolejne zagadnienie i to linkowanie może być statyczne(skompilowany kod funkcji bibliotecznej jest na stałe dołączany do programu wynikowego) lub dynamiczne "kod jest w bibliotece "dll" i biblioteka jest dostarczana oddzielnie  
P-156584
moler
Temat założony przez niniejszego użytkownika
» 2017-01-18 15:50:52
Dziękuje za udzielenie odpowiedzi. Teraz już  rozumiem :)
P-156586
« 1 »
  Strona 1 z 1