Skocz do zawartości

[c++]początki z c++ w linuxie


holkov

Polecane posty

Witam ,jestem początkującym w C++ ,swoją przygodę zaczynam razem z książką "Symfonia C++" lecz w książce tego nie wytłumaczyli a na google było mi to ciężko znaleść ,a mianowicie iż zaczerpnąłem z książki krótki program:

#include <iostream>
main()
{
int i ;
     for(i = 0 ; i < 64 ; i = i + 1)
     {
         if( i % 8)
         {
            std::cout << "\t" ; //wypis tabulatora
         }
         else
         {
            std::cout << "\n" ; //przejscie do nowej linii
         }
       // <editor-fold defaultstate="collapsed" desc="comment">
       std::cout << i; // </editor-fold>

     }
}

Kompilator NetBeans wyrzuca mi coś takiego przy próbie kompilacji:

KOD"/usr/bin/make" -f nbproject/Makefile-Debug.mk QMAKE= SUBPROJECTS= .build-conf

make[1]: Wejście do katalogu `/home/holkov/NetBeansProjects/aplikacja one'

"/usr/bin/make" -f nbproject/Makefile-Debug.mk dist/Debug/GNU-Linux-x86/aplikacja_one

make[2]: Wejście do katalogu `/home/holkov/NetBeansProjects/aplikacja one'

mkdir -p build/Debug/GNU-Linux-x86

rm -f build/Debug/GNU-Linux-x86/newmain1.o.d

g++ -c -g -MMD -MP -MF build/Debug/GNU-Linux-x86/newmain1.o.d -o build/Debug/GNU-Linux-x86/newmain1.o newmain1.cpp

newmain1.cpp:2: fatal error: conio.h: No such file or directory

make[2]: Opuszczenie katalogu `/home/holkov/NetBeansProjects/aplikacja one'

make[1]: Opuszczenie katalogu `/home/holkov/NetBeansProjects/aplikacja one'

compilation terminated.

make[2]: *** [build/Debug/GNU-Linux-x86/newmain1.o] Błąd 1

make[1]: *** [.build-conf] Błąd 2

make: *** [.build-impl] Błąd 2

 

BUILD FAILED (exit value 2, total time: 634ms)

powiedzcie szanowni programiści czego tu brakuje ? Kompilowanie w Linuxie niestety różni się drobnostkami od Windowsowego i mam problem właśnie z ogarnięciem tego ,a zależy mi na tym ;)

Link do komentarza
Udostępnij na innych stronach

Podany kod kompiluje się w systemie Linux bez problemu.

zapisz kod w pliku np. "testowy.cpp" i wykonaj polecenie:

KODg++ testowy.cpp -o testowy

W wyniku wykonania powinien powstać plik binarny "testowy", który można uruchomić.

 

Z błędów które podajesz można wywnioskować, że brakuje pakietów w systemie, które trezba doinstalować.

 

Przykładowo w Ubuntu, żeby kompilować programy, trzeba zainstalować pakiet build-essential.

Link do komentarza
Udostępnij na innych stronach

Wczoraj widocznie mi coś nie chciało zatrybić ponieważ robiłem tak jak mówiłeś i wiedziałem o czyms takim jak "build-essential" lecz widocznie może nie chciało poprawnie działać iż aktualizowałem je wcześniej i nie zrobiłem restartu maszyny. Ale ladnie skompilowało to co pisałem wyżej ;)

 

A druga sprawa jest taka że nie mogę znaleść odpowiedniej literatury na temat różnic w pisaniu w c++ pomiędzy Windows i Linux ,bo problem dotyczy podobnie tego co w pierwszym poście bo już zacząłem kombinować dalej i wrzuciłem do skompilowania coś takiego:

 

#include <iostream>
int main ()
{
   int     a = 5,
           b = 5,
           c = 5,
           d = 5 ;
   std::cout << "A oto wartość poszczególnych wyrażeń \n"
           "(nie mylić ze zmiennymi)\n" ;

   std::cout << "++a = " << ++a << std::endl
             << "b++ = " << b++ << std::endl
             << "--c = " << --c << std::endl
             << "d-- = " << d-- << std::endl;
   //skad te kurde wykrzykniki ?
   std::cout << "po obliczeniu tych wyrażen, same "
           "zmienne maja wartosci\n"
        << "a = " << a << std::endl
        << "b = " << b << std::endl
        << "c = " << c << std::endl
        << "d = " << d << std::endl;
}

I tutaj już nie robiłem przy pomocy gedit i g++ ,natomiast użyłem NetBeans i wyszło coś takiego w komunikatach:

KOD"/usr/bin/make" -f nbproject/Makefile-Debug.mk QMAKE= SUBPROJECTS= .build-conf

make[1]: Wejście do katalogu `/home/holkov/NetBeansProjects/aplikacja one'

"/usr/bin/make" -f nbproject/Makefile-Debug.mk dist/Debug/GNU-Linux-x86/aplikacja_one

make[2]: Wejście do katalogu `/home/holkov/NetBeansProjects/aplikacja one'

mkdir -p dist/Debug/GNU-Linux-x86

g++ -o dist/Debug/GNU-Linux-x86/aplikacja_one build/Debug/GNU-Linux-x86/main.o build/Debug/GNU-Linux-x86/newfile.o

make[2]: Opuszczenie katalogu `/home/holkov/NetBeansProjects/aplikacja one'

make[1]: Opuszczenie katalogu `/home/holkov/NetBeansProjects/aplikacja one'

build/Debug/GNU-Linux-x86/newfile.o: In function `main':

/home/holkov/NetBeansProjects/aplikacja one/newfile.cpp:3: multiple definition of `main'

build/Debug/GNU-Linux-x86/main.o:/home/holkov/NetBeansProjects/aplikacja one/main.cpp:15: first defined here

collect2: ld returned 1 exit status

make[2]: *** [dist/Debug/GNU-Linux-x86/aplikacja_one] Błąd 1

make[1]: *** [.build-conf] Błąd 2

make: *** [.build-impl] Błąd 2

 

BUILD FAILED (exit value 2, total time: 736ms)

Niestety nie byłem na tyle wspaniałomyślny lecz podejrzewam że błąd jest przy endl z dodaniem "std::" ale bez tego ukazywał się wykrzyknik przy tych liniach gdzie było to umieszczone.

Link do komentarza
Udostępnij na innych stronach

Ahh no tak właśnie pierwsze co to sie patrzy na repo i dlatego może się tak dzieje ,aktualnie jest to właśnie wersja 6.9 ,ale obadam to co podałeś ,dzięki. Dam wypowiedź jak sprawdze...

 

Niestety pobrałem wersje ze strony producenta "6.9.1" i w sumie jest dalej tak jak było

Link do komentarza
Udostępnij na innych stronach

po dokładniejszym przeczytaniu komunikatu błędu mam wrażenie że coś źle robisz projekt

spróbuj utworzyć nowy

-uruchom netbeansa -> plik -> nowy projekt (ctrl+shift+n)

-z listy categories wybierz c/c++

-z listy projects wybierz c/c++ Application

-przejdź dalej

-jeśli chcesz możesz zmienić nazwę i położenie projektu (Project name i Project Location) pozostałe pola pozostaw domyślnie

-kliknij zakończ

-(już teraz możesz skomplikować program)

-po lewo w zakładce projects powinien być widoczny twój nowy projekt a jego nazwa powinna być napisana pogrubioną czcionką

-rozwiń "gałąź" Source File i kliknij dwa razy na plik main.cpp

-w głównym oknie wpisz swój program i skompiluj

Link do komentarza
Udostępnij na innych stronach

Witam,

 

wcześniej jeszcze zadałeś pytanie na temat różnić między c++ dla Windowsa i Linux'a. Język C++ jest w jednym standardzie i kod w C++ możesz przenosić pomiędzy OS'ami bez problemu. Wyjątkiem jest jeżeli używasz WinApi, do którego nie ma bibliotek na Linuxie ( przynajmniej ja nie spotkałem :) ).

 

A co do kompilatorów, edytorów itp. Ja osobiście używam vi'a i kompilatora "c++" ;) Ostatnio zacząłem dodatkowo używać CodeBlocks'a bo łatwiej zachować porządek w dużych projektach :)

 

Pozdrawiam

Wowa

Link do komentarza
Udostępnij na innych stronach

Jeszcze jest różnica taka, że nie masz pod Linuksem w GCC (w cstdlib) funkcji itoa, a pod Winshitem jest (przynajmniej kiedyś było, nie wiem jak w aktualnych wersjach GCC) :D W sumie pod Linuksem to możesz sobie załatwić sprintf'em. http://www.cplusplus.com/reference/clibrary/cstdlib/itoa/ - tutaj wyjaśnienie. Z różnic to jeszcze przychodzi do głowy, że pod windą wymagana była dyrektywa #undef main, kiedy chcę korzystać z SDL'a - bo chyba wywalało błąd, że nie mam referencji do jakichś funkcji WinAPI, funkcji okienkowej, czy coś takiego.

Link do komentarza
Udostępnij na innych stronach

tych różnic jest znacznie więcej szczególnie jak zaczniesz pisać aplikacje okienkowe

ja pisałem pod wxWidgets mając nadzieje że kod będzie w pełni przenośny

no i sprawdziło się powiedzenie "nadzieja matką głupich", obie aplikacje działały zupełnie inaczej

 

jeśli chcesz mieć naprawdę między platformowe aplikacje to proponuję zainteresować się javą

 

edit:

a tak swoją drogą, jakim cudem mogłeś mieć otwarte kilka projektów jednocześnie ??

 

Wowa: polecam przejście z vi na vim dużo ciekawszy edytor obecnie w nim kodze w php

Link do komentarza
Udostępnij na innych stronach

jeśli chcesz mieć naprawdę między platformowe aplikacje to proponuję zainteresować się javą

[...]

Wowa: polecam przejście z vi na vim dużo ciekawszy edytor obecnie w nim kodze w php

Pisanie w Java to przerost formy nad treścią, ja bym raczej polecał Python'a, a do niego edytor Geany ;) Na razie jak pisałem w Python'ie to nie spotkałem się z różnicami dla dwóch systemów, a używałem w nim:

- silnika Panda 3D

- biblioteki pyGame

- tkInter (do GUI)

- OpenCV (wizja komputerowa)

- socket - bardzo łatwa obsługa, jest też sporo przykładów na necie

- Box2D i ODE do fizyki w grach

- Google App Engine (wiem, że to działa na tylko jednej platformie od Google - z tą różnicą, że SDK można uruchamiać na czołowej trójcy systemów - Lin, Mac, Win, a dla porównania z Javą, to wersja dla Python'a jest bardziej intuicyjna, przy Javie trzeba się babrać z adnotacjami, dodatkową klasą do zarządzania encjami itp., a w Python'ie można pisać jak się podoba)

 

Jak napiszesz aplikację w Python'ie to możesz ją pod Windowsem rozpowszechniać z "pakietem" Python Portable, do którego dołączasz użyte moduły dodatkowe.

Link do komentarza
Udostępnij na innych stronach

Co vi'a vim'a itp... -> Korzystam vi'a ponieważ staram się przyzwyczaić do konsoli i Screen'a ;) A jak pisałem do większych projektów ( i wygody kompilowania takich projektów ) korzystam z CodeBlocks'a.

 

Co do Api w C++ -> W swojej wypowiedzi nawet tego nie uwzględniałem bo wiem że Api Windowsowe to nie przeniesiemy na Linuxa tak ot, ale można używać zawsze bibliotek Qt, GTK+, bądź chociażby Allegro lub SDL.

 

Co do Pythona -> Mam zamiar się nauczyć tego języka ponieważ warto znać jeden język wysokiego poziomu i jeden skryptowy a do tego jak było mówione Python jest przenośny :)

 

 

Ja osobiście nastawiłem się na programowanie pod Linuksem ponieważ mi jako zapalonemu graczowi brakuje bardzo rozwijania większych projektów gier na Linuxa. Owszem jest Enemy Territory, jest Battle for Wesnoth, jest Warzone, ale to mało. Dlatego chciałbym sam tworzyć gry pod tą platformę ( albo przenośne ), żeby inni młodzi ludzie nie odrzucali Linuxa, tylko dlatego ze nie ma wielu gier i kasowych tytułów na niego, tak jak ja to robiłem przez długi długi czas.

 

Pozdrawiam

Wowa

Link do komentarza
Udostępnij na innych stronach

Co do Pythona -> Mam zamiar się nauczyć tego języka ponieważ warto znać jeden język wysokiego poziomu i jeden skryptowy a do tego jak było mówione Python jest przenośny :)

Ja osobiście nastawiłem się na programowanie pod Linuksem ponieważ mi jako zapalonemu graczowi brakuje bardzo rozwijania większych projektów gier na Linuxa. Owszem jest Enemy Territory, jest Battle for Wesnoth, jest Warzone, ale to mało. Dlatego chciałbym sam tworzyć gry pod tą platformę ( albo przenośne ), żeby inni młodzi ludzie nie odrzucali Linuxa, tylko dlatego ze nie ma wielu gier i kasowych tytułów na niego, tak jak ja to robiłem przez długi długi czas.

Widzę, że myślimy podobnie :) Jeśli jesteś zainteresowany to możemy spróbować kiedyś coś wspólnie zdziałać. http://jasonuniverse.appspot.com/ - na razie wszystkie projekty na tej stronie są napisane w C++, bo nie dodawałem jeszcze projektów pisanych w języku Python:

- praca inżynierska - 2 gry dla dzieci w Pandzie 3D, jedna dodatkowo korzysta z OpenCV (ukończona jedna gra - http://jasonuniversetest.appspot.com/file/...xIEUGxpaxix5wIM )

- Too Many Troopers 2 (w trakcie prac: http://jasonuniversetest.appspot.com/file/...xIEUGxpaxjBtQMM )

Link do komentarza
Udostępnij na innych stronach

  • 1 month later...

Co do oryginalnego błędu op - projekty się ze sobą nie "gryzły" tylko pewnie otwarty miałeś plik z projektu A, a jako "main project" miałeś ustawiony projekt B - przez co po wciśnięciu F11 czy przycisku Build budował Ci się inny kod niż miałeś przed oczami. Zakładka "Projects" - klikasz prawym, "Set as Main Project". Był też plugin który zamykał pliki nie należące do aktywnego projektu, mógłby Ci się przydać. ;) "Project Minder" chyba się zwał, poszukaj na innych niż domyślne update centers... chyba Plugin Portal Update Center.

 

Zapamiętaj sobie, że funkcja main() zawsze zwraca wartość int. W C++ nie ma domyślnego int dla funkcji bez zdefiniowanego typu.

Link do komentarza
Udostępnij na innych stronach

  • 7 months later...

Zarchiwizowany

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

×
×
  • Utwórz nowe...