Linux за българи: Форуми

Програмиране => Общ форум => Темата е започната от: BanishMemory в Nov 18, 2004, 13:55



Титла: C++ и gcc?!?!?!
Публикувано от: BanishMemory в Nov 18, 2004, 13:55
??? От два дни се опитвам да компилирам следният пример:
Примерен код
#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++, но не става. Кажете ми как да настроя компилатора за да бачка.
Благодаря ви предварително  :)


Титла: C++ и gcc?!?!?!
Публикувано от: the_real_maniac в Nov 18, 2004, 14:12
Ами аз  (може да се каже) знам С, но не и С++ , и немога да ти кажа ,че има нещо нередно. На пръв поглед всичко ми изглежда наред. Пробвай да компилираш с g++ ;)


Титла: C++ и gcc?!?!?!
Публикувано от: Йордан в Nov 18, 2004, 15:16
gcc source.cpp -o binara && ./binara
...ако за това питаш и ако добре си спомням как се компилира :)


Титла: C++ и gcc?!?!?!
Публикувано от: rpetrov в Nov 18, 2004, 15:49
Пенчо бре, чети!
Пенчо не чете.
...  ;)
Пенчо пак не ще.
...
  Петко Славейков


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

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

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

 :0 да бе

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


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

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



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


Титла: C++ и gcc?!?!?!
Публикувано от: Nepius в Nov 18, 2004, 16:25
Ето  тук има хубаво ръкодство за С/С++ под UNIX за начинаещи. Върши добра работа и под Linux.


Титла: C++ и gcc?!?!?!
Публикувано от: BanishMemory в 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>. ;)
Всички С++ компилатори поддържат стария стил на включване на заглавни файлове, но той е обявен за отживелица и неговата употреба в нови програми не се препоръчва. Точно затова не се използва в тази книга. :(
 :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.)

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

 ???


Титла: C++ и gcc?!?!?!
Публикувано от: rpetrov в 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.
- Друг начин е да се използват кратките имена за директории и файлове.
- Ако сложиш(оградиш) в кавички имена с празно в тях, може би да си решиш проблема.


Титла: C++ и gcc?!?!?!
Публикувано от: plamen_t в 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" макар че това е по-дърварският начин :) Най-добре е да намериш къде са конфигурационните файлове на g++ и да добавиш към тях къде да търси iostream.h
Само че не питай къде са защото по принцип вече  не ползвам Windows( за щастие :) )
Ай дано успееш, а пък да компилираш такива малки програми на Visual C++ си е чиста загуба на място защото за програма дълга около 1 Кб Visual C++ дава изход от няколко Мб :)


Титла: C++ и gcc?!?!?!
Публикувано от: Филип Бонев в 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-вал кода горе.

Хайде успех с четенето.


Титла: C++ и gcc?!?!?!
Публикувано от: BanishMemory в Nov 22, 2004, 20:03
Страхотно. Благодаря ви много  :D
До колкото разбирам, дори и source кода не е универсален и за всеки различен компилатор се изисква различен стил на писане, даже и от страна на включваните заглавни (хедърни) файлове.  :( . За по-сложни проекти сън съгласен, но чак пък и за най-елементарният възможен пример... направо съм шокиран. Всъщност няма какво да се шокирам. Дори и за едно "Hello World!" в Symbian се искат 20-тина заглавни файла, като има даже и helloworld.h  :p
Това за празният проект обаче ми хареса. Как не се съм се сетил.
Още веднъж благодаря на всички, които ми помогнаха, или поне се опитаха. Пожелавам ви да станете най-добрите програмисти на света  ;) Да живее Линукс!


Титла: C++ и gcc?!?!?!
Публикувано от: rpetrov в 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 г.
Едва ли в следващата версия на компилатора да не може да се компилира.


Титла: C++ и gcc?!?!?!
Публикувано от: Филип Бонев в Dec 03, 2004, 12:41
Така за Builder 6 със сигурност не става има някаква не съвместимост с header-ите.


Титла: C++ и gcc?!?!?!
Публикувано от: nocture в Dec 03, 2004, 22:52
Здравейте,
от два дена се занимавам с линукс и останах с доста добри впечатленея.
Поразрових се в темата, но не разбрах как точно да си стартирам програма на с. Примерно която тръгва на другите компилатори под Windows. Компилирах си програмата примерно:
Примерен код
gcc test.c
и всичко е ок.
Та после как мога да си стартирам програмата?


Титла: C++ и gcc?!?!?!
Публикувано от: Филип Бонев в Dec 04, 2004, 00:15
Нещо не си гледал както трябва и по форума има още теми иначе ето на бързо:
gcc file.c -o file
и после ./file и го пускаш.


Титла: C++ и gcc?!?!?!
Публикувано от: nocture в Dec 04, 2004, 13:24
Ясно, схванх.
Благодаря


Титла: C++ и gcc?!?!?!
Публикувано от: nocture в Dec 06, 2004, 12:36
Добре защо когато файлът е .cpp ми дава грещка :
Примерен код
/tmp/ccNxEXBl.o(.eh_frame+0x11): undefined reference to `__gxx_personality_v0'
collect2: ld returned 1 exit status

А като е с .c всичко е ОК


Титла: C++ и gcc?!?!?!
Публикувано от: rpetrov в Dec 06, 2004, 19:29
Цитат (nocture @ Дек. 06 2004,12:36)
Добре защо когато файлът е .cpp ми дава грещка :
Примерен код
/tmp/ccNxEXBl.o(.eh_frame+0x11): undefined reference to `__gxx_personality_v0'
collect2: ld returned 1 exit status

А като е с .c всичко е ОК

Когато методите са "C" се генерират едни имена на фунции и съответен код за извикването им.
Когато методите са на "C++" се генерират други имена.

примери:

1.) extern "C" void test_c(void);
2.) extern "C++" void test_cpp(void);


Титла: C++ и gcc?!?!?!
Публикувано от: rpetrov в Dec 06, 2004, 19:41
П.П. и затова header файловете съдържат:
Примерен код

........

ЗА СЪЖАЛЕНИЕ ИНТЕРФЕЙСА НА Ikonboard Е ОГРАНИЧЕН И НЕ ПРИЕМА КОДА НА "C++".
Ще трябва сам да го откриеш.


Титла: C++ и gcc?!?!?!
Публикувано от: plamen_t в Dec 06, 2004, 21:53
gcc -o file file.c (или gcc file.c -o file) е едно и също и ти генерира изпълним файл с име file. Само че gcc e C компилатор, а не C++. За да компилираш програма на С++ използвай компилатора за С++ , а именно g++  :)
T.e програмата се компилира по същият начин като със gcc: g++ -o file file.cpp или g++ file.cpp -o file
g++ върви заедно с gcc, така че е почти невъзможно да го нямаш при положение , че имаш gcc :)
Ай успех   ;)


Титла: C++ и gcc?!?!?!
Публикувано от: BanishMemory в Dec 16, 2004, 14:36
Абе хора. Изчетох 2 дебели книги за С/С++ и никъде не пишеше да има "методи". Хедърни (заглавни) файлове - да, библиотеки - да, класове - да... но тези метоси от къде ги измъкнахте не разбрах:
Цитат
Когато методите са "C" се генерират едни имена на фунции и съответен код за извикването им.
Когато методите са на "C++" се генерират други имена.

 :( Мислех, че само Java има методи.


Титла: C++ и gcc?!?!?!
Публикувано от: rpetrov в Dec 16, 2004, 15:23
Цитат (BanishMemory @ Дек. 16 2004,14:36)
но тези методи от къде ги измъкнахте

s/методи/функции/g ;-)


Титла: C++ и gcc?!?!?!
Публикувано от: Филип Бонев в Dec 16, 2004, 17:20
Цитат (rpetrov @ Дек. 16 2004,15:23)
Цитат (BanishMemory @ Дек. 16 2004,14:36)
но тези методи от къде ги измъкнахте

s/методи/функции/g ;-)

Много добре казано :)
Супер отговор :D