[SOLVED] C++ błąd programu w linuksie, na windowsie działa.

Bash, C, C++, Java, PHP, Ruby, GTK, Qt i wiele innych - wszystko tutaj.
shadowgd
Piegowaty Guziec
Piegowaty Guziec
Posty: 8
Rejestracja: 30 lis 2008, 16:39
Płeć: Mężczyzna
Wersja Ubuntu: 8.10
Środowisko graficzne: KDE Plasma

[SOLVED] C++ błąd programu w linuksie, na windowsie działa.

Post autor: shadowgd »

Mam problem z bardzo prostym, wręcz infantylnym programem, który właściwie nic specjalnego nie robi oprócz sumowania liczb i wyświetlania na ekranie. Sprawa jest tym dziwniejsza, że na WinZgrozie program się kompiluje i działa poprawnie. Na linuksie się kompiluje, ale nie wyświetla wyniku obliczeń i zatrzymuje się w pewnym momencie.
Być może błąd jest związany z brakiem jakiegoś pakietu, niedawno zainstalowałem sobie ponownie kubuntu w wersji 8.10 z nowym KDE 4.
Poniżej kod programu:

Kod: Zaznacz cały

#include <iostream>
using namespace std;
int main(void)
{
cout << "Jakies tam liczby... \n";
int a, b, c; // definicja zmiennych
a = 7;
cout << "Podaj liczbe: \n";
cin >> b; // podaj wartość b
c = a + b; // sumowanie
cout << c; // wartość c na ekran
return 0;
}
Jednak od razu nadmienię, że sprawdzałem opcję typu: apt-get install build-essential
i to nie jest ten problem. Pakiet jest zainstalowany. Polecenie cout, cin działa więc biblioteka standardowa jest załadowana. Kompilowałem to w konsoli przy użyciu

Kod: Zaznacz cały

g++ -o test.cpp test
. Jak i z wykorzystaniem edytora tekstu, bardzo popularnego na forum, nie mogę sobie w tej chwili przypomnieć nazwy, bodajże geany.
Wydaje mi się to bardzo dziwne. Od kilku dni szukam rozwiązania, ale nic nie znalazłem.
Awatar użytkownika
Nadril
Serdeczny Borsuk
Serdeczny Borsuk
Posty: 171
Rejestracja: 11 lip 2008, 10:54
Płeć: Mężczyzna
Wersja Ubuntu: 11.04
Środowisko graficzne: KDE Plasma
Architektura: x86_64
Kontakt:

Odp: C++ błąd programu w linuksie, na windowsie działa.

Post autor: Nadril »

Moze prompt nadpisuje Ci wynik, bo nie dales wyswietlania znaku nowej linii na koncu wyniku?

wynik u mnie:

Kod: Zaznacz cały

pią gru 05 <13:06:02>                                                                                                                                            
michal:~/Dokumenty: g++ test.cpp                                                                                                                                 
test.cpp:13:2: warning: no newline at end of file                                                                                                                
pią gru 05 <13:06:19>                                                                                                                                            
michal:~/Dokumenty: ./a.out
Jakies tam liczby...
Podaj liczbe:
2
9pią gru 05 <13:06:39>
michal:~/Dokumenty:
shadowgd
Piegowaty Guziec
Piegowaty Guziec
Posty: 8
Rejestracja: 30 lis 2008, 16:39
Płeć: Mężczyzna
Wersja Ubuntu: 8.10
Środowisko graficzne: KDE Plasma

Odp: C++ błąd programu w linuksie, na windowsie działa.

Post autor: shadowgd »

Być może to ten problem, nie mam teraz dostępu do komputera, sprawdzę w domu.
Ale dzięki za propozycję rozwiązania. Chociaż u ciebie pokazuje wynik, tylko dodaje do niego prompt. U mnie nie pokazuje wyniku wcale.
Awatar użytkownika
daris
Sędziwy Jeż
Sędziwy Jeż
Posty: 66
Rejestracja: 26 lut 2007, 17:20
Płeć: Mężczyzna
Wersja Ubuntu: 15.04
Środowisko graficzne: KDE Plasma
Architektura: x86_64

Odp: C++ błąd programu w linuksie, na windowsie działa.

Post autor: daris »

Kod: Zaznacz cały

cout << c; // wartość c na ekran
dorzuć na końcu endl czyli:

Kod: Zaznacz cały

cout << c << endl;
lub "\n"
:craz:
shadowgd
Piegowaty Guziec
Piegowaty Guziec
Posty: 8
Rejestracja: 30 lis 2008, 16:39
Płeć: Mężczyzna
Wersja Ubuntu: 8.10
Środowisko graficzne: KDE Plasma

Odp: C++ błąd programu w linuksie, na windowsie działa.

Post autor: shadowgd »

Niestety to nie ten problem wpisanie znaku nowej linnii nic nie zmienia. Tym bardziej, że kod przepisywałem z pamięci w orginalnym programie były jeszcze inne linie z cout-em. Może ktoś będzie miał jeszcze jakiś pomysł.

EDIT:
Oto co wyrzuca mi na konsolę:

Kod: Zaznacz cały

sh@sh:~/Dokumenty/C++/wykład_1$ ./test
==============================================================
 Przykładowy program testujacy funkcje w linuksie.
==============================================================
 Podaj liczbe do wprowadzenia: 2
sh@sh:~/Dokumenty/C++/wykład_1$ nty/C++/wykład_1$
Zwróccie uwagę na ostatni wiersz wywala krzaczki (dwa razy znak zgłoszenia interpretera $).
Awatar użytkownika
Struchu
Serdeczny Borsuk
Serdeczny Borsuk
Posty: 116
Rejestracja: 23 mar 2008, 19:58
Płeć: Mężczyzna
Wersja Ubuntu: 11.04
Środowisko graficzne: GNOME
Architektura: x86

Odp: C++ błąd programu w linuksie, na windowsie działa.

Post autor: Struchu »

To wklej może oryginalny program (może tam gdzieś dzieje się jakaś tragedia) - wersja umieszczona w tym temacie u mnie działa bezproblemowo.
Ma zielone, kocie oczy...
shadowgd
Piegowaty Guziec
Piegowaty Guziec
Posty: 8
Rejestracja: 30 lis 2008, 16:39
Płeć: Mężczyzna
Wersja Ubuntu: 8.10
Środowisko graficzne: KDE Plasma

Odp: C++ błąd programu w linuksie, na windowsie działa.

Post autor: shadowgd »

Kod: Zaznacz cały

#include <iostream>
using namespace std;

int main(void)
{
int a, b, c;
cout << "==============================================================\n";
cout << " Przykładowy program testujacy funkcje w linuksie.\n"; 
cout << "==============================================================\n";
cout << " Podaj liczbe do wprowadzenia: ";

cin >> b;
a = 7;
c = a + b;
cout << " Wynik = " << c << "\n";
cout << " Koniec.\n";

return 0;
}
- u mnie na winzgrozie ta wersja też działa bez problemów, ale wklejam kod. Aż dziwne, że w takim kodzie można byc coś popsuć. Hmm, mam wrażenie że to błąd systemu, tylko nie bardzo wiem jak go rozwiązać.
mikolajs
Wytworny Kaczor
Wytworny Kaczor
Posty: 352
Rejestracja: 15 paź 2008, 18:30
Płeć: Mężczyzna
Wersja Ubuntu: 9.04
Środowisko graficzne: KDE Plasma

Odp: C++ błąd programu w linuksie, na windowsie działa.

Post autor: mikolajs »

Spróbuj uruchomić program w innym terminalu na przykład bez x (Ctr+Alt+F1).
Bo program na pewno jest prawidłowy.
shadowgd
Piegowaty Guziec
Piegowaty Guziec
Posty: 8
Rejestracja: 30 lis 2008, 16:39
Płeć: Mężczyzna
Wersja Ubuntu: 8.10
Środowisko graficzne: KDE Plasma

Odp: C++ błąd programu w linuksie, na windowsie działa.

Post autor: shadowgd »

Na innym terminalu rzeczywiście wydaje się działać dobrze. Za to uzyskałem dziwne wyniki przy próbie ponownej kompilacji programu.
W geany się nie kompiluje (data pliku pozostaje stara), pomimo tego, że program zwraca komunikaty
o poprawnej kompilacji. Na pierwszym terminalu wyrzuca mi takie błędy:

Kod: Zaznacz cały

g++ -o test.cpp test >> logfile.log
test: In function `_start':
(.text+0x0): multiple definition of `_start'
/usr/lib/gcc/i486-linux-gnu/4.3.2/../../../../lib/crt1.o:(.text+0x0): first defined here
test:(.rodata+0x0): multiple definition of `_fp_hw'
/usr/lib/gcc/i486-linux-gnu/4.3.2/../../../../lib/crt1.o:(.rodata+0x0): first defined here
test: In function `_fini':
/build/buildd/glibc-2.8~20080505/build-tree/glibc-20080505/csu/../sysdeps/generic/initfini.c:109: multiple definition of `_fini'
/usr/lib/gcc/i486-linux-gnu/4.3.2/../../../../lib/crti.o:/build/buildd/glibc-2.8~20080505/build-tree/glibc-20080505/csu/../sysdeps/generic/initfini.c:109: first defined here
test:(.rodata+0x4): multiple definition of `_IO_stdin_used'
/usr/lib/gcc/i486-linux-gnu/4.3.2/../../../../lib/crt1.o:(.rodata.cst4+0x0): first defined here
test: In function `__data_start':
(.data+0x0): multiple definition of `__data_start'
/usr/lib/gcc/i486-linux-gnu/4.3.2/../../../../lib/crt1.o:(.data+0x0): first defined here
test: In function `__data_start':
(.data+0x4): multiple definition of `__dso_handle'
/usr/lib/gcc/i486-linux-gnu/4.3.2/crtbegin.o:(.data+0x0): first defined here
test: In function `_init':
/build/buildd/glibc-2.8~20080505/build-tree/i386-libc/csu/crti.S:15: multiple definition of `_init'
/usr/lib/gcc/i486-linux-gnu/4.3.2/../../../../lib/crti.o:/build/buildd/glibc-2.8~20080505/build-tree/i386-libc/csu/crti.S:15: first defined here
/usr/lib/gcc/i486-linux-gnu/4.3.2/crtend.o:(.dtors+0x0): multiple definition of `__DTOR_END__'
test:(.dtors+0x4): first defined here
/usr/bin/ld: warning: Cannot create .eh_frame_hdr section, --eh-frame-hdr ignored.
/usr/bin/ld: error in test(.eh_frame); no .eh_frame_hdr table will be created.
collect2: ld returned 1 exit status
Wczoraj robiłem aktualizację systemu, może dlatego pojawiły się błędy. Jakieś pomysły jak to naprawić?
Awatar użytkownika
Carnophage
Serdeczny Borsuk
Serdeczny Borsuk
Posty: 169
Rejestracja: 03 maja 2008, 22:08
Płeć: Mężczyzna
Wersja Ubuntu: inny OS
Środowisko graficzne: Xfce
Architektura: x86_64
Lokalizacja: 127.0.0.1
Kontakt:

Odp: C++ błąd programu w linuksie, na windowsie działa.

Post autor: Carnophage »

Na poczatek moze naucz sie kompilowac programy z poziomu konsoli, bo

Kod: Zaznacz cały

g++ -o test.cpp test
nie ma prawa zadzialac tak jak bys tego chcial. No chyba, ze tresc programu masz w pliku test, a skompilowany plik ma nosic nazwe test.cpp
shadowgd
Piegowaty Guziec
Piegowaty Guziec
Posty: 8
Rejestracja: 30 lis 2008, 16:39
Płeć: Mężczyzna
Wersja Ubuntu: 8.10
Środowisko graficzne: KDE Plasma

Odp: C++ błąd programu w linuksie, na windowsie działa.

Post autor: shadowgd »

Rzeczywiście, mój błąd. Nie kompilowałem już dawno w c++, na co dzień korzystam z Delphi pod windą. Wobec tego proszę mi wybaczyć ten karygodny błąd :].
Nadal nie rozumiem, dlaczego po kompilacji w geany program się tak dziwnie zachowywał, ale skoro w tej chwili wydaje się, że działa to temat uważam za zamknięty.
Dzięki wszystkim, za pomoc.
ODPOWIEDZ

Wróć do „Programowanie”

Kto jest online

Użytkownicy przeglądający to forum: Obecnie na forum nie ma żadnego zarejestrowanego użytkownika i 4 gości