LINUX.ORG.RU

Помогите разобраться с Eclipse


0

0

После Vim и Kate решил попробовать какую-нибудь приличную IDE. Выбор пал на сабж. После создания проект «Hello World C++ Project» отказался компилиться, сославшись на

g++ -O0 -g3 -Wall -c -fmessage-length=0 -MMD -MP -MF"src/kr7.d" -MT"src/kr7.d" -o"src/kr7.o" "../src/kr7.cpp"
../src/kr7.cpp:9:20: warning: iostream: No such file or directory
../src/kr7.cpp: In function 'int main()':
../src/kr7.cpp:13: error: 'cout' was not declared in this scope
../src/kr7.cpp:13: error: 'endl' was not declared in this scope

В свойствах проекта я явно указал в include paths строчку /usr/include/c++/4.3.3/ , но ошибки полезли из стандартных хеадеров:

g++ -I/usr/include/c++/4.3.3 -O0 -g3 -Wall -c -fmessage-length=0 -MMD -MP -MF"src/kr7.d" -MT"src/kr7.d" -o"src/kr7.o" "../src/kr7.cpp"
In file included from /usr/include/c++/4.3.3/iosfwd:46,
                 from /usr/include/c++/4.3.3/ios:44,
                 from /usr/include/c++/4.3.3/ostream:45,
                 from /usr/include/c++/4.3.3/iostream:45,
                 from ../src/kr7.cpp:9:
/usr/include/c++/4.3.3/bits/stringfwd.h:46: error: expected constructor, destructor, or type conversion before '(' token
/usr/include/c++/4.3.3/bits/stringfwd.h:55: error: expected type-specifier before 'allocator'
/usr/include/c++/4.3.3/bits/stringfwd.h:55: error: expected '>' before 'allocator'
/usr/include/c++/4.3.3/bits/stringfwd.h:60: error: template argument 3 is invalid
/usr/include/c++/4.3.3/bits/stringfwd.h:60: error: invalid type in declaration before ';' token
/usr/include/c++/4.3.3/bits/stringfwd.h:68: error: '_GLIBCXX_END_NAMESPACE' does not name a type
In file included from /usr/include/c++/4.3.3/cwchar:49,
                 from /usr/include/c++/4.3.3/bits/postypes.h:47,
                 from /usr/include/c++/4.3.3/iosfwd:47,
                 from /usr/include/c++/4.3.3/ios:44,
                 from /usr/include/c++/4.3.3/ostream:45,
                 from /usr/include/c++/4.3.3/iostream:45,
                 from ../src/kr7.cpp:9:
/usr/include/c++/4.3.3/cstddef:57: error: '::size_t' has not been declared
In file included from /usr/include/c++/4.3.3/bits/postypes.h:47,
                 from /usr/include/c++/4.3.3/iosfwd:47,
                 from /usr/include/c++/4.3.3/ios:44,
                 from /usr/include/c++/4.3.3/ostream:45,
                 from /usr/include/c++/4.3.3/iostream:45,
                 from ../src/kr7.cpp:9:
/usr/include/c++/4.3.3/cwchar:61: error: expected constructor, destructor, or type conversion before 'extern'
In file included from /usr/include/c++/4.3.3/ios:45,
                 from /usr/include/c++/4.3.3/ostream:45,
                 from /usr/include/c++/4.3.3/iostream:45,
                 from ../src/kr7.cpp:9:
/usr/include/c++/4.3.3/exception:40: error: expected declaration before end of line

Неужели у эклипса по умолчанию настолько неюзабельный конфиг, или я что-то делаю неправильно?

★★★★★

Ответ на: комментарий от dimon555

>using namespace std?

Разумеется. Дело в этом:

>../src/kr7.cpp:9:20: warning: iostream: No such file or directory

melkor217 ★★★★★
() автор топика
Ответ на: комментарий от dimon555

#include <iostream>
using namespace std;
/* на всякий случай, сорц */
int main() {
cout << "Hello World!" << endl;
return 0;
}

melkor217 ★★★★★
() автор топика

Eclipse обычно подключает хедеры, которые соответсвуют компилятору. У вас версия g++ не совпадает с версией libstdc++. Свяжите g++ -> g++-4.3.3.

Conficker
()
Ответ на: комментарий от Conficker

dan-desktop:/home/dan# g++ --version
g++ (Debian 4.3.3-8) 4.3.3


dan-desktop:/home/dan# apt-file search /usr/include/c++/4.3.3
libstdc++6-4.3-dev: /usr/include/c++/4.3.3


dan-desktop:/home/dan# aptitude show libstdc++6-4.3-dev
Package: libstdc++6-4.3-dev
State: installed
Version: 4.3.3-8

melkor217 ★★★★★
() автор топика
Ответ на: комментарий от melkor217

Собираю g++(4.1.3), libstdc++6(4.3):

g++ -I/usr/include/c++/4.3 -O0 -g3 -Wall -c -fmessage-length=0 -MMD -MP -MF"src/aaa.d" -MT"src/aaa.d" -o"src/aaa.o" "../src/aaa.cpp"
/usr/include/c++/4.3/bits/stringfwd.h:46: error: expected constructor, destructor, or type conversion before ‘(’ token
/usr/include/c++/4.3/bits/stringfwd.h:55: error: expected type-specifier before ‘allocator’
/usr/include/c++/4.3/bits/stringfwd.h:55: error: expected `>' before ‘allocator’
/usr/include/c++/4.3/bits/stringfwd.h:55: error: expected unqualified-id before ‘>’ token
/usr/include/c++/4.3/bits/stringfwd.h:60: error: expected initializer before ‘<’ token
/usr/include/c++/4.3/bits/stringfwd.h:65: error: expected initializer before ‘<’ token

Ничего не напоминает?

Проверте внимателнее. Удалите лишние пути: Project -> Properties -> C/C++ General -> Path and Symbols -> Includes -> GNU C++.

Conficker
()
Ответ на: комментарий от Conficker

Там только /usr/include и /usr/local/include , которые нельзя удалить.

melkor217 ★★★★★
() автор топика

Ещё раз перепроверил на свежеустановленном Debian squeeze -- те же ошибки.

melkor217 ★★★★★
() автор топика

Как выяснилось, проблема есть только на версиях 4.х. На 3.2.2 всё работает нормально.

// Неужели никто эклипс для C/C++ не использует.. может, есть что-нибудь лучше?)

melkor217 ★★★★★
() автор топика
Ответ на: комментарий от melkor217

> судя по всему, оно есть internal builder

Там вообще противопоказано куда-то лезть руками. Попробуй сгенерировать из этого проекта Makefile и посмотри, что не так.

Или просто пользуйся Makefile project.

tailgunner ★★★★★
()
Ответ на: комментарий от tailgunner

>Или просто пользуйся Makefile project.

Оно даже там переменные окружения подменяет.

make all
g++ main.cpp -o main
main.cpp:8:20: error: iostream: No such file or directory
make: *** [all] Error 1

melkor217 ★★★★★
() автор топика
Ответ на: комментарий от melkor217

>> Или просто пользуйся Makefile project.

> Оно даже там переменные окружения подменяет.

Значит, оно ненавидит тебя лично.

> g++ main.cpp -o main

> main.cpp:8:20: error: iostream: No such file or directory

Хочешь сказать, что если выдать эту команду на этот файл в шелле, она компилирует без ошибок?

tailgunner ★★★★★
()
Ответ на: комментарий от tailgunner

>Хочешь сказать, что если выдать эту команду на этот файл в шелле, она компилирует без ошибок?

да.

кстати, вот как я до этого докатился:

1) Качаем образ Debian Squeeze и обновляемся до конца.

2) Ставим все зависимости eclipse 3.2, который в репозитории.

3) Качаем с eclipse.org последнюю сборку Eclipse CDT.

4) Ужасаемся неработающему эклипсу.

melkor217 ★★★★★
() автор топика
Ответ на: комментарий от melkor217

>> Хочешь сказать, что если выдать эту команду на этот файл в шелле, она компилирует без ошибок?

> да.

опубликуй Makefile - хочу видеть это чудо.

tailgunner ★★★★★
()
Ответ на: комментарий от tailgunner

как-то так:

all:
	g++ main.cpp -o main

То, что предлагает эклипс, даже в пастбин боюсь вставлять. Но, так или иначе, они одинаково не работают.

melkor217 ★★★★★
() автор топика
Ответ на: комментарий от tailgunner

>Тогда зачем всё это нытье?

Не в мейкфайлах дело. Ещё раз, проблема в том, что эклипс не находит библиотеки С++ в тестинге дебиан, и указать их правильным образом не удаётся.

melkor217 ★★★★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.