Автор Тема: C++ и gcc?!?!?!  (Прочетена 5362 пъти)

BanishMemory

  • Напреднали
  • *****
  • Публикации: 24
    • Профил
C++ и gcc?!?!?!
« -: Nov 18, 2004, 13:55 »
'<img'> От два дни се опитвам да компилирам следният пример:
Примерен код
#include <iostream>
using namespace std;

int main()
{
    int i, j;
    double d;
    
    i=10;
    j=20;
    d=99.101;
    
    cout << "Here are some values: " << i << ' ' << j << ' ' << d;
    
    return 0;
}


Чета една дебела книга, в която пише, че това ще бачка на всички компилатори, но работи единствено на Micro$oft Visual C++. Опитвам се да го подкарам на Dev-C++(gcc) и Borland C++, но не става. Кажете ми как да настроя компилатора за да бачка.
Благодаря ви предварително  '<img'>
Активен

"Софтуерът е като чукането: най-добре е, когато е безплатно." - Линус Торвалдс

the_real_maniac

  • Напреднали
  • *****
  • Публикации: 1258
  • Kernel panic, me - no panic ;-) :-)
    • Профил
C++ и gcc?!?!?!
« Отговор #1 -: Nov 18, 2004, 14:12 »
Ами аз  (може да се каже) знам С, но не и С++ , и немога да ти кажа ,че има нещо нередно. На пръв поглед всичко ми изглежда наред. Пробвай да компилираш с g++ '<img'>
Активен

Powered by Debian GNU / LINUX /// Intel inside ...

„Насилието е последното убежище на некомпетентността“ - Айзък Азимов (1920 — 1992)

Йордан

  • Напреднали
  • *****
  • Публикации: 1451
  • Distribution: Ubuntu / Gentoo
  • Window Manager: Gnome
  • не е важно колко ти е голяма пишката, а какво можеш с нея
    • Профил
    • WWW
C++ и gcc?!?!?!
« Отговор #2 -: Nov 18, 2004, 15:16 »
gcc source.cpp -o binara && ./binara
...ако за това питаш и ако добре си спомням как се компилира '<img'>
Активен

Всеки пост - отговор на въпрос !!!

Йордан Георгиев
http://ygeorgiev.net/

rpetrov

  • Напреднали
  • *****
  • Публикации: 571
    • Профил
    • WWW
C++ и gcc?!?!?!
« Отговор #3 -: Nov 18, 2004, 15:49 »
Пенчо бре, чети!
Пенчо не чете.
...  '<img'>
Пенчо пак не ще.
...
  Петко Славейков


Цитат
Чета една дебела книга, в която пише, че това ще бачка на всички компилатори, но работи единствено на Micro$oft Visual C++.

Изненада, обикновенно новите неща тръгват на всички други компилатори и година две след това на microsoft-ските. За мен е приятна изненада да науча, че в Visual C++ можело да се използват неща както е по дебелите книги за C++, а не да се включват някакви си измислени(с нестандартни имена) header файлове.

Цитат
Опитвам се да го подкарам на Dev-C++(gcc) и Borland C++, но не става

 ':0' да бе

Искам да отбележа, че трите споменати развойни среди са за windows, а пък форума е за linux. Чудя се дали да отговоря или не  '<img'>


Цитат
Кажете ми как да настроя компилатора за да бачка.

С настойвачка на компилатори.  '<img'>
По-вероятно трябва да се настои проекта в развойната среда, така че да стартира компилатора и т.н. с подходящите опции и файлове.
За целта, моля те да прочетеш ПЪРВО ръководството за работа със съответната среда.



P.S:
Ако използваш linux или cygwin, то едно от следните неща ще ти помогне. За целта нека споменатия в темата код е записан в файла test.cpp и е отворен терминален прозорец в
който въвеждаме някоя от следните команди:
1.) g++ -o test test.cpp
2.1.) gcc -o test test.cpp -lstdc++
2.2.) gcc -x c++ -o test test.cpp -lstdc++
, където -x c++ указва че test.cpp съдържа програма на C++.
3.) маке
Заб.: в този случай предварително трябва да е създаден файл с име Makefile, който съдържа реда:
Примерен код
test: test.cpp
Активен

Nepius

  • Напреднали
  • *****
  • Публикации: 24
    • Профил
C++ и gcc?!?!?!
« Отговор #4 -: Nov 18, 2004, 16:25 »
Ето  тук има хубаво ръкодство за С/С++ под UNIX за начинаещи. Върши добра работа и под Linux.
Активен

BanishMemory

  • Напреднали
  • *****
  • Публикации: 24
    • Профил
C++ и gcc?!?!?!
« Отговор #5 -: Nov 18, 2004, 17:39 »
Извинявам се, че ви накарах да ме нахортувате, за дето не пиша в някой Windows-ки форум. Според мен за програмирането няма значение на каква операционна система си и този код, който съм написал е абсолютно елементарен. Освен това останах с впечатлението че Dev-C++ работи със gcc.
Ето какво ми изписва компилатора:
Примерен код
Комрилатор: Default compiler
Изпълняване на  g++.exe...
g++.exe "C:\Documents and Settings\Nokia\My Documents\c++.doc\novoCpp.cpp" -o "C:\Documents and Settings\Nokia\My Documents\c++.doc\novoCpp.exe"     -L"C:\Program" -L"Files\Dev-Cpp\lib"
C:/Documents and Settings/Nokia/My Documents/c++.doc/novoCpp.cpp:1:20: iostream: No such file or directory
C:/Documents and Settings/Nokia/My Documents/c++.doc/novoCpp.cpp: In function
   `int main()':
C:/Documents and Settings/Nokia/My Documents/c++.doc/novoCpp.cpp:13: `cout'
   undeclared (first use this function)
C:/Documents and Settings/Nokia/My Documents/c++.doc/novoCpp.cpp:13: (Each
   undeclared identifier is reported only once for each function it appears

   in.)

Изпълнението пректатено.

Това е от Dev-C++.
1. #include <stdio.h>
Тук stdio.h е името на заглавния файл, който се използва от функциите за вход/изход, а изразът предизвиква включването на този файл във вашата програма. Ключов смисъл е, че директивата #include включва файл.
При създаването на С++, както и още няколко години се използваше същия стил на включване като С. Всъщност, Standart С++ все още поддържа С-стила на заглавните файлове, предимно от съображения за обратна съвместимост, но дефинира нов вид хедъри, които можете да използвате вместо тези заглавни файлове. С++ варианта на стандартните С заглавни файлове добавя префикс c към името на файла и изпуска разшитрението .h. Например новият вид С++ хедър за math.h е <cmath>, а за <string.h> е <cstring>. '<img'>
Всички С++ компилатори поддържат стария стил на включване на заглавни файлове, но той е обявен за отживелица и неговата употреба в нови програми не се препоръчва. Точно затова не се използва в тази книга. '<img'>
 ':0' Опитах и двата начина, но не става.
2. "using namespace std;" е т.нар. "Именовано пространство".
Когато включите нов вид хедър във вашата програма, то неговото съдържание се намира в именованото пространство std. Именовано пространство (namespace) представлява просто декларативна област. Предназначението на именованото прострнство е да ограничи имената на идентификаторите, за да се избегнат колизии между тях. Обикновено имената на библиотечните функции и на други подобни елементи просто се поставяха в глобалното именовано пространство (както е в С). Съдържанието на новия вид хедъри се поставя в именованото пространство std. ... и т.н....
Както се досещаш, преписах това от книгата. ("С++ практически самоучител" от Хърбърт Шилдт).
Там пише и за "Работа със стар компилатор" - ... Тоест, само заместете
Примерен код
#include <iostream>
using namespace std;

с
Примерен код
#include <iostream.h>

Но от това пък ми изписва следното:
Примерен код
Компилатор: Default compiler
Изпълняване на  g++.exe...
g++.exe "C:\Documents and Settings\Nokia\My Documents\c++.doc\novoCpp.cpp" -o "C:\Documents and Settings\Nokia\My Documents\c++.doc\novoCpp.exe"     -L"C:\Program" -L"Files\Dev-Cpp\lib"
C:/Documents and Settings/Nokia/My Documents/c++.doc/novoCpp.cpp:1:22: iostream.h: No such file or directory
C:/Documents and Settings/Nokia/My Documents/c++.doc/novoCpp.cpp: In function
   `int main()':

C:/Documents and Settings/Nokia/My Documents/c++.doc/novoCpp.cpp:13: `cout'
   undeclared (first use this function)
C:/Documents and Settings/Nokia/My Documents/c++.doc/novoCpp.cpp:13: (Each
   undeclared identifier is reported only once for each function it appears
   in.)

Изпълнението прекратено

 '<img'>
Активен

"Софтуерът е като чукането: най-добре е, когато е безплатно." - Линус Торвалдс

rpetrov

  • Напреднали
  • *****
  • Публикации: 571
    • Профил
    • WWW
C++ и gcc?!?!?!
« Отговор #6 -: Nov 18, 2004, 18:15 »
Гледай внимателно:
Цитат
Изпълняване на  g++.exe...
g++.exe "C:\Documents and Settings\Nokia\My Documents\c++.doc\novoCpp.cpp" -o "C:\Documents and Settings\Nokia\My Documents\c++.doc\novoCpp.exe"     -L"C:\Program" -L"Files\Dev-Cpp\lib"


Флага -L е некоректен, трябва да е  -L"C:\Program Files\Dev-Cpp\lib", т.е.  или в Dev-C++ нещо не е настроено както трябва или тази среда има проблем с празен(space) символ в имена на файлове и директории.
Липсва -I флаг, т.е. къде да търси хедър файловете. Нещо не е конфигурирано в средата - защо компилатора е стартиран само с -L флаг? Може би пак проблем с празно в пътя.


Възможни решения:
- Преинсталирай развойната среда например в C:\devel.
- Друг начин е да се използват кратките имена за директории и файлове.
- Ако сложиш(оградиш) в кавички имена с празно в тях, може би да си решиш проблема.
Активен

plamen_t

  • Напреднали
  • *****
  • Публикации: 170
    • Профил
C++ и gcc?!?!?!
« Отговор #7 -: Nov 19, 2004, 11:14 »
Еми то много добре си е написано какъв е проблема:
Цитат
C:/Documents and Settings/Nokia/My Documents/c++.doc/novoCpp.cpp:1:22: iostream.h: No such file or directory


Компилаторът не може да намери iostream.h откъдето следва че не може и да дефинира cout функцията. Причините са 2. Или файлът iostream.h физически не съществува на РС-то или компилаторът не знае къде се намира. Ето защо най-добре би било първо да провериш дали iostream.h е качен на РС-то ти. Ако е качен може или да укажеш на компилатора къде се намира iostream.h или да дадеш в #include  пълния път до iostrem.h ,т.е #include "C:\pytq_do_iostream.h\iostrem.h" макар че това е по-дърварският начин '<img'> Най-добре е да намериш къде са конфигурационните файлове на g++ и да добавиш към тях къде да търси iostream.h
Само че не питай къде са защото по принцип вече  не ползвам Windows( за щастие '<img'> )
Ай дано успееш, а пък да компилираш такива малки програми на Visual C++ си е чиста загуба на място защото за програма дълга около 1 Кб Visual C++ дава изход от няколко Мб '<img'>
Активен

Филип Бонев

  • Напреднали
  • *****
  • Публикации: 517
  • Distribution: Debian
  • Window Manager: KDE
    • Профил
C++ и gcc?!?!?!
« Отговор #8 -: Nov 20, 2004, 01:23 »
Здравей,

Ето как съм компилирал твоя пример и с какво

Borland C++ 6.0
Примерен код

#include <vcl.h>
#include <iostream.h>
#pragma hdrstop
using namespace std;
WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int)
{
  int i, j;
  double d;

  i=10;
  j=20;
  d=99.101;

  cout << "Here are some values: " << i << ' ' << j << ' ' << d;
  return 0;
}


Visual Studio .NET:
Примерен код
#include <iostream>
#include <stdafx.h>
using namespace std;

int main()
{
   int i, j;
   double d;
  
   i=10;
   j=20;
   d=99.101;
  
   cout << "Here are some values: " << i << ' ' << j << ' ' << d;
  
   return 0;
}


MinGW Developer Studio(Мисля, че това е като DevCPP - работи с gcc):
Примерен код
#include <iostream>
using namespace std;

int main()
{
   int i, j;
   double d;
  
   i=10;
   j=20;
   d=99.101;
  
   cout << "Here are some values: " << i << ' ' << j << ' ' << d;
  
   return 0;
}


Така, като гледам лесно може да се направи да се компилира и на трите компилатора. Трябва само да се ползва някои друг #ifdef, предполагам.

Редакция:

Dev-C++ 5.0b9:
Примерен код
#include <iostream>
using namespace std;

int main()
{
   int i, j;
   double d;
  
   i=10;
   j=20;
   d=99.101;
  
   cout << "Here are some values: " << i << ' ' << j << ' ' << d;
  
   return 0;
}


ПП: Като съм компилирал съм ползвал създавал празен проект в всичките среди за компилиране и след това съм компилира paste-вал кода горе.

Хайде успех с четенето.
Активен

Поздрави,
Филип Бонев

BanishMemory

  • Напреднали
  • *****
  • Публикации: 24
    • Профил
C++ и gcc?!?!?!
« Отговор #9 -: Nov 22, 2004, 20:03 »
Страхотно. Благодаря ви много  '<img'>
До колкото разбирам, дори и source кода не е универсален и за всеки различен компилатор се изисква различен стил на писане, даже и от страна на включваните заглавни (хедърни) файлове.  '<img'> . За по-сложни проекти сън съгласен, но чак пък и за най-елементарният възможен пример... направо съм шокиран. Всъщност няма какво да се шокирам. Дори и за едно "Hello World!" в Symbian се искат 20-тина заглавни файла, като има даже и helloworld.h  ':p'
Това за празният проект обаче ми хареса. Как не се съм се сетил.
Още веднъж благодаря на всички, които ми помогнаха, или поне се опитаха. Пожелавам ви да станете най-добрите програмисти на света  '<img'> Да живее Линукс!
Активен

"Софтуерът е като чукането: най-добре е, когато е безплатно." - Линус Торвалдс

rpetrov

  • Напреднали
  • *****
  • Публикации: 571
    • Профил
    • WWW
C++ и gcc?!?!?!
« Отговор #10 -: Nov 30, 2004, 12:36 »
Цитат (philip_bonev @ Ноември 20 2004,02:23)
Здравей,

Ето как съм компилирал твоя пример и с какво

Borland C++ 6.0
Примерен код

#include <vcl.h>
#include <iostream.h>
#pragma hdrstop
using namespace std;
WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int)
{
  .....
}

.....


Това за Borland C++ 6.0 ми изглежда странно.
Това е приложение за Windows.

Пробвал ли си да създадеш проект за "конзола", на C++ и без VCL ?

Кода от първото съобщение на BanishMemory се компилира без промяна с "Free Borland® C++ Compiler 5.5" публикуван през 2000 г.
Едва ли в следващата версия на компилатора да не може да се компилира.
Активен

Филип Бонев

  • Напреднали
  • *****
  • Публикации: 517
  • Distribution: Debian
  • Window Manager: KDE
    • Профил
C++ и gcc?!?!?!
« Отговор #11 -: Dec 03, 2004, 12:41 »
Така за Builder 6 със сигурност не става има някаква не съвместимост с header-ите.
Активен

Поздрави,
Филип Бонев

nocture

  • Напреднали
  • *****
  • Публикации: 133
    • Профил
C++ и gcc?!?!?!
« Отговор #12 -: Dec 03, 2004, 22:52 »
Здравейте,
от два дена се занимавам с линукс и останах с доста добри впечатленея.
Поразрових се в темата, но не разбрах как точно да си стартирам програма на с. Примерно която тръгва на другите компилатори под Windows. Компилирах си програмата примерно:
Примерен код
gcc test.c
и всичко е ок.
Та после как мога да си стартирам програмата?
Активен

Best regards,
Viktor Tomov
gentoosys 2.6.15-gentoo-r1

Филип Бонев

  • Напреднали
  • *****
  • Публикации: 517
  • Distribution: Debian
  • Window Manager: KDE
    • Профил
C++ и gcc?!?!?!
« Отговор #13 -: Dec 04, 2004, 00:15 »
Нещо не си гледал както трябва и по форума има още теми иначе ето на бързо:
gcc file.c -o file
и после ./file и го пускаш.
Активен

Поздрави,
Филип Бонев

nocture

  • Напреднали
  • *****
  • Публикации: 133
    • Профил
C++ и gcc?!?!?!
« Отговор #14 -: Dec 04, 2004, 13:24 »
Ясно, схванх.
Благодаря
Активен

Best regards,
Viktor Tomov
gentoosys 2.6.15-gentoo-r1