Skocz do zawartości

Nauka Kompilacji


laesear

Rekomendowane odpowiedzi

Witam,

Pomogliście już mi tutaj parę razy, więc mam nadzieję, że i teraz też się uda.

Zauważyłem, że kompilacja ze źródeł często mi kiepsko idzie. Właściwie znam tylko trochę g++, trochę makefile, a nawet nie wiem do końca do czego służy linker.

Zauważyłem na wiki (bardzo dobra robota tak btw) różne ciekawe linki, m.in. ten o sztuczkach w bashu przypadł mi do gustu. Fajna rzecz.

Z tym wiąże się me zapytanie: czy znacie coś podobnego, jakiś blog, stronę, tutorial o tym jak (dobrze) kompilować pod linuksem? Najlepiej jakby to była instrukcja od podstaw, jak najdokładniejsza, bo mam jakieś luki w wiedzy i w ten sposób mógłbym te braki uzupełnić. Bardzo fajnie by było, jeśli byłoby to w ojczystym języku, fajnie - jeśli po angielsku.

Jest w ogóle coś takiego? Czy zostaje tylko man gcc i man make?

Odnośnik do komentarza
Udostępnij na innych stronach

Trudno mi tutaj zlapac o co tak (_na prawde_ → naprawdę) ORT chodzi w pytaniu "jak (dobrze) kompilowac pod linuksem?"

Jesli chodzi o to jak programowac w C/C++ to poradników na internecie multum

Jesli potrzeba graficznego programu wspomagajacego, Geany lub CodeBlocks powinny pomóc dostatecznie

Jesli chodzi o jeszcze cos innego, to bardzo prosze jakos jasniej przedstawic sprawe :)

Odnośnik do komentarza
Udostępnij na innych stronach

(Zastanawiam się w ogóle czy wybrałem dobry dział - może powinienem wybrać Programowanie? Ale kompilacja też pasuje)

Może precyzując i odpowiadając na pytania odpowiem jak ja widzę taką kompilację. Być może w moim rozumowaniu wystąpią błędy i jeśli ktoś jest też na początkującym etapie to proszę tego nie czytać, bo mogę namieszać w głowie.

 

Można kompilować za pomocą gcc i ./configure, make, make install. O ile ten drugi sposób instaluje programy na dysku, a pliki Makefile zawierają wiele dziwnych reguł (ciężko je wszystkie ogarnąć) o tyle w gcc kompiluje mi się wygodniej. Ale być może make robi to szybciej, lepiej, a ja tego nie widzę.

\Z czym mam problemy? Czasem jak kompiluję czyjś kod ze źródeł to mam błąd na etapie configure (to jeszcze da się naprawić, acz niezawsze), czasem na etapie make (tutaj już trochę gorzej, bo jak mniemam trzeba zaglądać do kodu).

Jeśli mam błędy na etapie configure to zazwyczaj doinstalowuje biblioteki -dev z repo, jeśli tego nie znajduję to instaluję rpm'y. Jeśli tego też nie ma to się załamuję, bo trzeba też kompilować ze źródeł, co będzie dotyczyło badania kolejnych zależności, czasem te zależności idą w kółko i stwierdzam, że się nie da. :o

Jeśli mam błędy na etapie make, że błąd albo warning w linijce takiej a takiej to otwieram ten plik patrzę na include'y i szukam na necie do jakich bibliotek należą. Jeszcze nie szedłem dalej, ale widzę tylko jedno rozwiązanie w takiej sytuacji. Szukamy jakiegoś tutoriala i uczymy sie krok po kroku danej biblioteki. Jeśli mamy warning w danej funkcji to szukamy dokumentacji tej funkcji, piszemy przykładowe programiki, uczymy się do czego jest ta biblioteka, kiedy coś tam umiemy, wracamy do kompilacji, naprawiamy błąd i widzimy, że jest kolejny, z innej biblioteki. Szukamy, naprawiamy. Poświęcamy na to dużo czasu, ale ile się można nauczyć! Czy może da się jakoś zautomatyzować ten proces, bez nauki bibliotek?

To tyle jeśli chodzi o make. Czasami mam błędy przy kompilowaniu gcc. Jeśli wywala mi błędy kompilacji i zaznzacza linijki to nie ma problemu, można to znaleźć i naprawić. Gorzej jeśli wyskakują błędy, które nie mają przy sobie ponumerowanych linijek. Często są to brakujące argumenty do linkera (np. -lSDL). Często takie sytuacje się zdarzają przy kompilacji gier. Ale o co dokładnie tam chodzi to nie wiem i czy dobrze myślę, że są to błędy linkera.

 

Czy jest jakiś tutorial uwzględniający takie błędy i tłumaczący co sie dzieje podczas kompilacji i ewentualnie moje błędy w rozumowaniu?

Odnośnik do komentarza
Udostępnij na innych stronach

Kompilacja gcc i jak to ujales ./configure, make, make install to to jest jedna i ta sama rzecz tyle tylko, ze w przypadku tej drugie masz juz caly gotowy program przygotowany do kompilacji. Configure sprawdza czy wszystkie zaleznosc i wymagania sa spelnione, make kompiluje, make install - instaluje. I teraz skoro kompilujesz tylko cudze programy to w 99,9% bedziesz mial problemy tylko podczas etapu configure i tylko tym powinienes sie martwic.

Jezeli podczas etapu make kompilacja ci sie nie zatrzymuje to glupota jest naprawianie bledów czy (zwlaszcza) warningów ;] Niczego w ten sposób sie nie nauczysz, a program(jezeli sie kompiluje) tak czy siak bedzie dzialac poprawnie! Spróbuj sobie kiedys skompilowac jakies wieksze srodowisko graficzne - przez 2 godziny bedzie ci rzucac errorami a pózniej i tak zadziala. :)

 

Dopóki nie bedziesz mial pojecia o programowaniu i o tym jak to wszystko dziala, zajmowanie sie takimi rzeczami troche mija sie z celem. Marnujesz tylko swój czas bo nie wiesz co robisz.

Odnośnik do komentarza
Udostępnij na innych stronach

Dopóki nie będziesz miał pojęcia o programowaniu i o tym jak to wszystko działa, zajmowanie się takimi rzeczami trochę mija się z celem. Marnujesz tylko swój czas bo nie wiesz co robisz.

 

... A! zapomniałem o najważniejszym - po co mi taka nauka kompilacji. Chcę pobawić się cudzym kodem, skompilować, potem zmienić parę rzeczy, potem znów skompilować, potem znów coś dodać, coś zmienić. I w ten sposób się czegoś nauczyć. Powinieniem to na początku napisać, żeby nikt nie dochodził do wniosków, że jednak nie potrzebuje się tego nauczyć i jest mi to niepotrzebne...Ale tu już zupełnie schodzimy z tematu. Jeśli nie ma takich tutków to pozostaje czytanie manuali...

Odnośnik do komentarza
Udostępnij na innych stronach

Chce pobawic sie cudzym kodem, skompilowac, potem zmienic pare rzeczy, potem znów skompilowac, potem znów cos dodac, cos zmienic. I w ten sposób sie czegos nauczyc.

 

Musisz zdawac sobie sprawe, ze nie wszyscy sa dobrymi programistami. WIelu ludzi po prostu robi cos, co dziala i nie przejmuja sie, ze ktos bedzie chcial czytac ich kod. Sami po kilku miesiacach nie ogarniaja juz wlasnej dzialanosci. Cudzy kod to nie zabawa: to katorga. Co to jest "repairsumofblah", moze do niczego nie potrzebne, a autor zapomnial usunac? Albo komentarz "TODO for tomorrow", który jest obok jakiejs funkcji? Czy to juz jest poprawione? Kiedy bylo to jutro? Albo jakas tablica zostala skopiowana i w drugiej czesci kodu wystepuje pod inna nazwa. Czy ta pierwsza jest jeszcze do czegos potrzebna?

 

Pól biedy, jesli sa w ogóle jakies komantarze. Czasem autor pisze kod w Eclipse i uzywa eclipsowych kreatorków i debugera, wiec komentarze sa mu zbedne. Jak zobaczysz kod bez zupelnie zadnego opisu, to sie odechciewa czytac.

Odnośnik do komentarza
Udostępnij na innych stronach

Musisz zdawać sobie sprawę, że nie wszyscy są dobrymi programistami. WIelu ludzi po prostu robi coś, co działa i nie przejmują się, że ktoś będzie chciał czytać ich kod. Sami po kilku miesiącach nie ogarniają już własnej działaności. Cudzy kod to nie zabawa: to katorga. Co to jest "repairsumofblah", może do niczego nie potrzebne, a autor zapomniał usunąć? Albo komentarz "TODO for tomorrow", który jest obok jakiejś funkcji? Czy to już jest poprawione? Kiedy było to jutro? Albo jakaś tablica została skopiowana i w drugiej części kodu występuje pod inną nazwą. Czy ta pierwsza jest jeszcze do czegoś potrzebna?

 

Pół biedy, jeśli są w ogóle jakieś komantarze. Czasem autor pisze kod w Eclipse i używa eclipsowych kreatorków i debugera, więc komentarze są mu zbędne. Jak zobaczysz kod bez zupełnie żadnego opisu, to się odechciewa czytać.

 

Zdaję sobie z tego sprawę.

Odnośnik do komentarza
Udostępnij na innych stronach

Musisz zdawac sobie sprawe, ze nie wszyscy sa dobrymi programistami. WIelu ludzi po prostu robi cos, co dziala i nie przejmuja sie, ze ktos bedzie chcial czytac ich kod. Sami po kilku miesiacach nie ogarniaja juz wlasnej dzialanosci. Cudzy kod to nie zabawa: to katorga. Co to jest "repairsumofblah", moze do niczego nie potrzebne, a autor zapomnial usunac? Albo komentarz "TODO for tomorrow", który jest obok jakiejs funkcji? Czy to juz jest poprawione? Kiedy bylo to jutro? Albo jakas tablica zostala skopiowana i w drugiej czesci kodu wystepuje pod inna nazwa. Czy ta pierwsza jest jeszcze do czegos potrzebna?

 

Pól biedy, jesli sa w ogóle jakies komantarze. Czasem autor pisze kod w Eclipse i uzywa eclipsowych kreatorków i debugera, wiec komentarze sa mu zbedne. Jak zobaczysz kod bez zupelnie zadnego opisu, to sie odechciewa czytac.

Jezeli ktos nie pisze programiku który z zalozenia ma byc na otwartej licencji udostepniony spolecznosci to i nie ma powodu aby martwic sie o czytelnosc kodu dla innych. Wazne aby sam rozumial, ze zmienna "aaaasweetjarek" odpowiada za przechowywanie daty.

Z drugiej strony komentarze i czytelny kod to zawsze dobry zwyczaj.

Odnośnik do komentarza
Udostępnij na innych stronach

Spróbuj sobie kiedys skompilowac jakies wieksze srodowisko graficzne - przez 2 godziny bedzie ci rzucac errorami a pózniej i tak zadziala.

2 godziny to moze Wine sie zrobie ;)

 

Musisz zdawac sobie sprawe, ze nie wszyscy sa dobrymi programistami. WIelu ludzi po prostu robi cos, co dziala i nie przejmuja sie, ze ktos bedzie chcial czytac ich kod.

Opisales mnie po prostu idealnie :P

Dodam natomiast, ze jest jeszcze taka niepisana zasada - uslyszalem od P. Mgr. Inzyniera wydzialu Informatyka - by pisac kod na poczatku byleby dzialal jak nalezy a nie od razu meczyc sie z optymalizacja, bo mozna wiecej czasu spedzic na optymalizacji nizli na samym pisaniu celu, jak zaczna sie schody to wtedy dopiero optymalizujemy. Stosuje te zasade po dzis dzien, jest w porzadku (balagan w kodzie a i tak wszystko dziala, magia jakas xD)

 

Pól biedy, jesli sa w ogóle jakies komantarze.

Komentarze to ja robie na szczescie, moze nie przesadnie duzo, ale robie. Bez komentarzy nie ma zycia bo sie wlasnie zacznie to "kiedy bylo jutro" &c.

 

Heos - zgodze sie, szczególnie z pierwszym zdaniem B)

Odnośnik do komentarza
Udostępnij na innych stronach

Jeśli chcesz dodać odpowiedź, zaloguj się lub zarejestruj nowe konto

Jedynie zarejestrowani użytkownicy mogą komentować zawartość tej strony.

Zarejestruj nowe konto

Załóż nowe konto. To bardzo proste!

Zarejestruj się

Zaloguj się

Posiadasz już konto? Zaloguj się poniżej.

Zaloguj się
×
×
  • Dodaj nową pozycję...