Skocz do zawartości

Zarchiwizowany

Ten temat jest archiwizowany i nie można dodawać nowych odpowiedzi.

zizou666

Rozwiązany: Programowanie pod Ubuntu 10.04

Polecane posty

Otoz od jakiegos czasu posiadam system operacyjny Ubuntu 10.04. Zainstalowalem srodowisko programistyczne Geany. I mam nastepujacy problem. Jesli pisze program pod Windowsem (najczesciej Dev C++) i ladnie dziala, to przy probie uruchomienia go na linuksie juz tak latwo nie jest. Okazuje sie ze Geany nie zna funkcji rand i srand. Tylko na poczatku wychwycilem tego typu niezgodnosci, ale moze byc ich wiecej. Wiecie jak temu zaradzic? Albo jakie inne srodowisko pod Ubuntu polecacie.

Oczywiscie wiem, ze moge pisac program w dowolnym edytorze tekstu i pozniej go uruchomic poprzez kompilator gcc czy tez g++ ale wolalbym tez byc wyposazony w jakies srodowisko programistyczne ;)

Link do komentarza
Udostępnij na innych stronach

Cóż, geany jest raczej nastawione na lekkość.

Jeżeli chcesz czegoś w stylu DevC++ to zobacz sobie Code::Blocks, jest dostępne i na win i na lin i na maki(i pewnie na inne systemy też).

Oferuje mniej więcej to samo(tzn. nie pamięram już czy DevC++ ma podświetlenie składni, autouzupełnianie, itp.)

Jeżeli chodzi o funkcje rand i srand, to nie powinieneś ich nigdy używać, bo domyślny generator losowy na windowsa jest do d***, i ogółem działanie funkcji losowych jest bardzo różne na różnych systemach.

Dobrym RNG jest http://pl.wikipedia.org/wiki/Mersenne_Twister

A poza tym, jeżeli nie zamierzasz pisać czegoś co intensywnie wykorzystuje CPU/karte graficzną, to dobrym pomysłem może być programowanie w czymś lajtowym(np. Python+PyGame/PyOpenGL).

A jeżeli zależy ci na wieloplatformowości i chcesz używać C/C++ to pamiętaj o SDL.

Link do komentarza
Udostępnij na innych stronach

Okazuje sie ze Geany nie zna funkcji rand i srand.

Generalnie to środowiska programistyczne nie znają żadnych funkcji. Wszystkie funkcje biorą się z odpowiednich bibliotek zainstalowanych w systemie, które są dostępne po załączeniu pliku nagłówkowego (w przypadku srand jest to stdlib.h) i zlinkowaniu go z odpowiednią biblioteką. Aby środowisko programistyczne mogło to zrobić musi mieć odpowiednio skonfigurowany kompilator (pod linuksem bardzo często jest to po prostu gcc, rzadko kiedy środowisko programistyczne posiada swój własny kompilator). Myślę, że u ciebie problem polega właśnie na nieprawidłowej konfiguracji (być może ścieżki dla linkera są nieprawidłowo ustawione). Napisz jaki dokładnie błąd dostajesz przy próbie kompilacji kodu z funkcją srand?

Link do komentarza
Udostępnij na innych stronach

Polecam Eclipse + CDT.

Asmageddon << rand to tak samo dobra metoda generowania liczb pseudolosowych jak każda inna. Wszystko zależy jakie masz potrzeby. Czasami najlepszym generatorem jest coś w stylu:

unsigned int Random()
{
   static unsigned int count = 0x1234567890;
   return ++count;
}

a czasami potrzeba czegoś pokroju xorshiftu. Często jednak zwykły rand jest jak najbardziej wystarczający.

Link do komentarza
Udostępnij na innych stronach

Ok, sciagam sobie Eclipse i obadam go.

A jeszcze 2 slowa odnosnie Geany i terminala. Otoz ten program z funkcja rand() i srand() juz mi dziala w geany, dolaczylem stdlib.h. Ale mam z nim inny problem. Z grubsza rzecz biorac program ma sortowac iles tam losowych liczb (ile, podaje uzytkownik). Robi to dynamicznie alokujac pamiec dla tablicy tych liczb. Program dziala bardzo dobrze na windzie. Na linuksie niby tez dziala, ale wyswietla cos takiego:

85175788.png

Na dole sa wyswietlane posortowane liczby jednak zaraz potem program przerywa dzialanie. Oczywiscie zwalniam pamiec poprzez delete[].

Domyslam sie ze jest to jakis komunikat zwiazany z mapa pamieci ale nic wiecej. Jeslii nie bedzie wiadomo skad to sie bierze to wrzuce kod programu.

Teraz wykonalem ten sam program tylko w osobnych plikach robiac funkcje wejscia, wyjscia i sortujaca oraz laczac wszystko w jedno w mainie i dziala wszystko bardzo dobrze ;) Moze jakiegos bleda strzelilem gdzies po drodze, musze przeanalizowac caly kod.

Link do komentarza
Udostępnij na innych stronach

Tam na tym screenie masz takie coś druga linijka

*** glibc detected *** ./test: free(): invalid pointer 0x08d18030 ***
./test to pewnie nazwa programu. free to nazwa funkcji, która zwalnia pamięć alokowaną malloc itp.

Jeżeli przyjrzysz się linijce bodajże 7 od końca to zobaczysz takie coś

08d18000-08d39000 (blah-blah) [heap]

Oznacza to, że program spróbował zwolnić pamięć ze sterty, czyli taką która alokował dynamicznie, jednak podany wskaźnik był zły. Być może podałeś nie ten wskaźnik.

int * ptr = new int[x];
while ( warunek)
{
  //jakieś działania

  ptr++;
}
delete [] ptr;

Link do komentarza
Udostępnij na innych stronach

Rzeczywiście lepiej by było, gdybyś wrzucił kod, bo bez tego trudno namierzyć błąd. Z tego co widzę, to jest problem ze zwalnianiem pamięci, ale skąd się wziął, to nie wiem.

Jeśli chodzi o IDE, to jeśli Eclipse Ci się nie spodoba (co jest mało prawdopodobne, ale jednak możliwe), to możesz spróbować jeszcze programu KDevelop.

Link do komentarza
Udostępnij na innych stronach

Alez oczywiscie ;) Po prostu kiedy podzielilem program na poszczegolne funkcje i wysylalem wskaznik na pierwszy element tablicy do funkcji wejscie, sortuj, wyjscie to tablica byla przetwazana, ale wywolanie nastepnej funkcji spowrotem zaczynalo od jej pierwszego elementu. Natomiast piszac wszystko w 1 pliku (wlasnie o nazwie test.cpp) majac funkcje tylko do sortowania, po wyswietleniu posortowanej tablicy zapomnialem cofnac sie do pierwszego elementu i w efekcie probowalem zwalniac blok zaczynajacy sie poza moim zaalokowanym obszarem :D Dzieki za podpowiedz bo sam bym sie chyba nie zorientowal.

Z KDevelopem mialem minimalny kontakt i byl calkiem niezly, aczkolwiem czy jest on wspierany przez srodowisko Gnome? Posiadam Ubuntu 10.04 i bylem przekonany ze o KDevelopie moge zapomniec ;) Na razie zainstalowalem Eclipse i jest dosc mocno skomplikowany, ale mam nadzieje ze z czasem go odkryje.

Aha i skoro juz jestem w temacie to wie ktos jak wykonac makefile takiego programu? Mam kilka plikow mianowicie: main.cpp, sortuj.h (deklaracje funkcji sortujacych), sortuj.cpp (definicje funkcji), wejscie.h (deklaracja funkcji odpowiedzialnej z losowanie danych i wspisywanie danych), wejscie.cpp (jej definicja), wyjscie.h i wyjscie.cpp (deklaracja i definicja funkcji wyswietlajacej posortowana tablice). Troszke juz probowalem ale niespecjalne mi to wychodzilo. Mam nadzieje ze nie odbieglem za bardzo od tego tematu.

Link do komentarza
Udostępnij na innych stronach

Nie ma konieczności używać makefile w eclipsie.

Tworząc nowy projekt masz do wyboru Executable, Shared Lib, Static Lib i Makefile. Korzystaj z pierwszych trzech i eclipse sam będzie zarządzał tym co budować. Jeżeli jednak bardzo Ci zależy na make to:

1) tworzysz sobie plik Makefile,

2) otwierasz zakładkę Make Target (Window > Show View > Make Target)

3) klikasz ikonkę New Make Target, zielone kółko z plusem,

4) podajesz nazwę (info dla Ciebie, np. Release), target (np. all), komendę (tak jakbyś ją wpisał w terminal, tylko raczej bez targetu),

5) wybierasz jeden z Make Targetów,

6) klikasz ikonkę Build Make Target.

Eclipse nie jest jakoś szczególnie pogmatwany. W gruncie rzeczy wszystkie znane mi IDE są do siebie bardzo podobne, ostatecznie to ten sam zakres funkcjonalności.

Link do komentarza
Udostępnij na innych stronach

Troszke sie nie zrozumielismy, moja wina, bo nie wyjasnilem. Nie chodzilo mi o makefile tworzony poprzez eclipse. Pewnie tak jak mowisz, jest to nieoplacalne ba sa lepsze sposoby. Dzieki za szczegolowa instrukcje, na pewno sie przyda. Ja mialem na mysli stworzenie samemu pliku makefile. Czyli napisanie go do mojego programu zlozonego z kilku plikow w edytorze tekstu i uruchomienie z poziomu terminala ;) Tak juz calkowicie odbiegajac od srodowiska jakim jest eclipse. Przepraszam jeszcze raz, bo to z mojej winy to nieporozumienie.

Link do komentarza
Udostępnij na innych stronach

Gość
Temat jest zablokowany i nie można w nim pisać.


  • Kto przegląda   0 użytkowników

    • Brak zalogowanych użytkowników przeglądających tę stronę.
×
×
  • Utwórz nowe...