Linux FC5 +C
Есть код на сях, как его скомпилировать в линуксе? gcc -test дает test.out , который исполняется, но что с ним дальше делать?
Собственно что ты хочешь сделать то вобще? И читай man по gcc
gcc file.o // линковка
file.c имя файла и листингом программы. Обязательно указывать нужно расширение
после этого в твоем каталоге если все прошло успешно будет исполняемый файл программы a.out
объясните плс
Есть куча исходников которые нормально компилируются под win на с и с++
На С я скомпилировал и оплучил оут файл.
на С++ же получил следующее
Код:
gcc 1.cpp
1.cpp:7:2: warning: no newline at end of file
/tmp/cc7fUbY6.o: In function `__static_initialization_and_destruction_0(int, int)':
1.cpp:(.text+0x23): undefined reference to `std::ios_base::Init::Init()'
/tmp/cc7fUbY6.o: In function `__tcf_0':
1.cpp:(.text+0x6c): undefined reference to `std::ios_base::Init::~Init()'
/tmp/cc7fUbY6.o: In function `main':
1.cpp:(.text+0x8e): undefined reference to `std::cout'
1.cpp:(.text+0x93): undefined reference to `std::basic_ostream<char, std::char_traits<char> >& std::operator<< <std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&, char const*)'
1.cpp:(.text+0x9b): undefined reference to `std::basic_ostream<char, std::char_traits<char> >& std::endl<char, std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&)'
1.cpp:(.text+0xa3): undefined reference to `std::basic_ostream<char, std::char_traits<char> >::operator<<(std::basic_ostream<char, std::char_traits<char> >& (*)(std::basic_ostream<char, std::char_traits<char> >&))'
/tmp/cc7fUbY6.o:(.eh_frame+0x11): undefined reference to `__gxx_personality_v0'
collect2: ld returned 1 exit status
1.cpp:7:2: warning: no newline at end of file
/tmp/cc7fUbY6.o: In function `__static_initialization_and_destruction_0(int, int)':
1.cpp:(.text+0x23): undefined reference to `std::ios_base::Init::Init()'
/tmp/cc7fUbY6.o: In function `__tcf_0':
1.cpp:(.text+0x6c): undefined reference to `std::ios_base::Init::~Init()'
/tmp/cc7fUbY6.o: In function `main':
1.cpp:(.text+0x8e): undefined reference to `std::cout'
1.cpp:(.text+0x93): undefined reference to `std::basic_ostream<char, std::char_traits<char> >& std::operator<< <std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&, char const*)'
1.cpp:(.text+0x9b): undefined reference to `std::basic_ostream<char, std::char_traits<char> >& std::endl<char, std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&)'
1.cpp:(.text+0xa3): undefined reference to `std::basic_ostream<char, std::char_traits<char> >::operator<<(std::basic_ostream<char, std::char_traits<char> >& (*)(std::basic_ostream<char, std::char_traits<char> >&))'
/tmp/cc7fUbY6.o:(.eh_frame+0x11): undefined reference to `__gxx_personality_v0'
collect2: ld returned 1 exit status
это при компиляции простейшей программы.
Вообще как правильно писать на этих языках под линуксом? Купил кучу литературы а там как всегда ничего о процессе компиляции нет.
почитать man gcc, info gcc, прикрепленные топики с литературой. gcc по другому обрабатывает исходники чем Visual C++, например. покажи свою простейшую программу, на ее примере разберем как что делать на С++ для gcc
using namespace::std
int main()
{
std::cout << "123" << std::endl;
return 0;
}
Результат
Код:
gcc 1.cpp
1.cpp:8:2: warning: no newline at end of file
/tmp/ccW4hc6F.o: In function `__static_initialization_and_destruction_0(int, int)':
1.cpp:(.text+0x23): undefined reference to `std::ios_base::Init::Init()'
/tmp/ccW4hc6F.o: In function `__tcf_0':
1.cpp:(.text+0x6c): undefined reference to `std::ios_base::Init::~Init()'
/tmp/ccW4hc6F.o: In function `main':
1.cpp:(.text+0x8e): undefined reference to `std::cout'
1.cpp:(.text+0x93): undefined reference to `std::basic_ostream<char, std::char_traits
<char> >& std::operator<< <std::char_traits<char> >(std::basic_ostream<char, std::cha
r_traits<char> >&, char const*)'
1.cpp:(.text+0x9b): undefined reference to `std::basic_ostream<char, std::char_traits
<char> >& std::endl<char, std::char_traits<char> >(std::basic_ostream<char, std::char _traits<char> >&)'
1.cpp:(.text+0xa3): undefined reference to `std::basic_ostream<char, std::char_traits <char> >::operator<<(std::basic_ostream<char, std::char_traits<char> >& (*)(std::basi c_ostream<char, std::char_traits<char> >&))'
/tmp/ccW4hc6F.o:(.eh_frame+0x11): undefined reference to `__gxx_personality_v0'
collect2: ld returned 1 exit status
1.cpp:8:2: warning: no newline at end of file
/tmp/ccW4hc6F.o: In function `__static_initialization_and_destruction_0(int, int)':
1.cpp:(.text+0x23): undefined reference to `std::ios_base::Init::Init()'
/tmp/ccW4hc6F.o: In function `__tcf_0':
1.cpp:(.text+0x6c): undefined reference to `std::ios_base::Init::~Init()'
/tmp/ccW4hc6F.o: In function `main':
1.cpp:(.text+0x8e): undefined reference to `std::cout'
1.cpp:(.text+0x93): undefined reference to `std::basic_ostream<char, std::char_traits
<char> >& std::operator<< <std::char_traits<char> >(std::basic_ostream<char, std::cha
r_traits<char> >&, char const*)'
1.cpp:(.text+0x9b): undefined reference to `std::basic_ostream<char, std::char_traits
<char> >& std::endl<char, std::char_traits<char> >(std::basic_ostream<char, std::char _traits<char> >&)'
1.cpp:(.text+0xa3): undefined reference to `std::basic_ostream<char, std::char_traits <char> >::operator<<(std::basic_ostream<char, std::char_traits<char> >& (*)(std::basi c_ostream<char, std::char_traits<char> >&))'
/tmp/ccW4hc6F.o:(.eh_frame+0x11): undefined reference to `__gxx_personality_v0'
collect2: ld returned 1 exit status
:) а попробуй собирать не с помощью gcc, а с пом. g++
Спасибо! g++ сработал. Правда придирчивый он какой =)
gcc -x c++ -lstdc++
Весь косяк в том, что при вызове gcc не подключается standart С++ library. Поэтому и не может найти исспользуемые оттудова объекты и типы. Подключить ее можно вручную, как показал squirL. g++ исспользует тот же самый компилятор, но подключает библиотеку сразу, тоесть и создан для удобства. По сути и gcc и g++ просто вызыывают один компилятор, линковщик и т.п. с разными ключами.
да это не косяк, а нормальное поведение. "базовым" языком для никсов пока еще является С. да и вообще - С и С++ разные языки. вас же не удивляет, что gcc по дефолту java или fortran не обрабатывает? хотя могет ;)
А поведение естественно нормальное. Правда язык он и по расширению исходников определяет. Так что gcc компилирует сам c++ код вполне нормально без всяких дополнительных ключей даже, а вот библиотеку стандартную не подключает.
К примеру функции вроде istr я найти не смог нигде. В man не нашел.
да когда же вы уже гуглом научитесь пользоваться...