[C++][Visual studio] pliki .obj

diego_maradona
Użytkownik
Użytkownik
Posty: 184
Rejestracja: 16 cze 2010, o 00:59
Płeć: Mężczyzna
Lokalizacja: Kraków
Podziękował: 80 razy

[C++][Visual studio] pliki .obj

Post autor: diego_maradona »

Wyobraźmy sobie taką sytuację- ktoś prosi mnie o napisanie klasy/obiektu. Piszę plik nagłówkowy oraz drugi plik .cpp w którym są zawarte definicje funkcji składowych. Ale ja nie chcę by ten ktoś miał dostęp do tych definicji. Podobno w takich sytuacjach tworzy się pliki .obj , niestety tutaj moja wiedza się kończy, a przy googlowaniu nie wpadłem na żaden trop. Byłbym wdzięczny za wyjaśnienie/namiary do artykułu
Afish
Moderator
Moderator
Posty: 2828
Rejestracja: 15 cze 2008, o 15:45
Płeć: Mężczyzna
Lokalizacja: Seattle, WA
Podziękował: 3 razy
Pomógł: 356 razy

[C++][Visual studio] pliki .obj

Post autor: Afish »

W trakcie kompilacji kompilator tworzy pliki obj i pliki lib. Plik lib to nic innego jak kilka plików obj w jednym wraz z indeksowaniem ułatwiającym dostęp do zawartości. Po kompilacji następuje linkowanie - linker zbiera pliki obj, lib, dll i następnie "skleja" je w jeden plik wykonywalny - na Windowsie EXE, na Uniksie ELF. Teraz zastanówmy się, czego potrzebujemy, aby przekazać nasz kod, ale jednocześnie nie ujawniając szczegółów. Kompilator będzie wymagał pliku nagłówkowego (h), aby móc sprawdzić poprawność wywoływania funkcji, tworzenia obiektów etc. Nie będzie potrzebował tak naprawdę kodu funkcji w postaci jawnej. Linker będzie miał za zadanie dopasować odpowiednie wywołania funkcji do odpowiednich kodów maszynowych, zatem będzie potrzebował pliku obj (albo lib). Tyle teorii, czas na praktykę: w trakcie kompilacji powstaje gdzieś plik obj (być może trzeba będzie odpowiednim parametrem wywołania kompilatora podać ścieżkę). Ten plik przekazujemy komuś innemu, a odbiorca musi załączyć go do swojego linkera (czyli gdzieś w ustawieniach linkera podaje ścieżkę do pliku). Musimy też przekazać komuś plik h, a odbiorca musi w ustawieniach kompilatora podać ścieżkę do tego pliku. Następnie w kodzie źródłowym includuje plik h i gotowe.
ODPOWIEDZ