@Muriam

Как исправить ошибку при компиляции .cpp файла через терминал linux ROSA?

Этот код прекрасно компилируется в DEV-C++, если убрать однострочные комментарии.

/* добавить два элемента к массиву и посчитать кол-во элементов */
#include <iostream>
//#include <conio.h>
#include <vector>
#include <locale.h> 

using namespace std;

int main()
{	
	setlocale(LC_ALL, "rus");
	
    int rez;
    int arr_src[] = {1,8,3,2};
    std::vector<int> arr(arr_src, arr_src + sizeof(arr_src)/sizeof(arr_src[0]));

    arr.push_back(7);		//добавление элемента "7"
    arr.push_back(8);		//и "8"

    rez = arr.size();          				
    cout << "кол-во элементов в массиве: " << rez << endl;
    
    cout << "массив: ";
    for (int i = 0; i < rez; i++)
        cout << arr[i] << ' ';
        
        
//    getch();
    return 0;
}


muriam@muriam-Satellite-L450 ~ $ gcc vector.cpp -o vector
/tmp/ccCANy65.o: In function `main':
vector.cpp:(.text+0xc4): undefined reference to `std::cout'
vector.cpp:(.text+0xc9): 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*)'
vector.cpp:(.text+0xd9): undefined reference to `std::ostream::operator<<(int)'
vector.cpp:(.text+0xde): 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> >&)'
vector.cpp:(.text+0xe6): undefined reference to `std::ostream::operator<<(std::ostream& (*)(std::ostream&))'
vector.cpp:(.text+0xf0): undefined reference to `std::cout'
vector.cpp:(.text+0xf5): 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*)'
vector.cpp:(.text+0x122): undefined reference to `std::cout'
vector.cpp:(.text+0x127): undefined reference to `std::ostream::operator<<(int)'
vector.cpp:(.text+0x134): 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)'
/tmp/ccCANy65.o: In function `__static_initialization_and_destruction_0(int, int)':
vector.cpp:(.text+0x1b1): undefined reference to `std::ios_base::Init::Init()'
vector.cpp:(.text+0x1c0): undefined reference to `std::ios_base::Init::~Init()'
/tmp/ccCANy65.o: In function `std::vector<int, std::allocator<int> >::_M_insert_aux(__gnu_cxx::__normal_iterator<int*, std::vector<int, std::allocator<int> > >, int const&)':
vector.cpp:(.text._ZNSt6vectorIiSaIiEE13_M_insert_auxEN9__gnu_cxx17__normal_iteratorIPiS1_EERKi[_ZNSt6vectorIiSaIiEE13_M_insert_auxEN9__gnu_cxx17__normal_iteratorIPiS1_EERKi]+0x25f): undefined reference to `__cxa_begin_catch'
vector.cpp:(.text._ZNSt6vectorIiSaIiEE13_M_insert_auxEN9__gnu_cxx17__normal_iteratorIPiS1_EERKi[_ZNSt6vectorIiSaIiEE13_M_insert_auxEN9__gnu_cxx17__normal_iteratorIPiS1_EERKi]+0x2c8): undefined reference to `__cxa_rethrow'
vector.cpp:(.text._ZNSt6vectorIiSaIiEE13_M_insert_auxEN9__gnu_cxx17__normal_iteratorIPiS1_EERKi[_ZNSt6vectorIiSaIiEE13_M_insert_auxEN9__gnu_cxx17__normal_iteratorIPiS1_EERKi]+0x2d0): undefined reference to `__cxa_end_catch'
/tmp/ccCANy65.o: In function `std::vector<int, std::allocator<int> >::_M_check_len(unsigned long, char const*) const':
vector.cpp:(.text._ZNKSt6vectorIiSaIiEE12_M_check_lenEmPKc[_ZNKSt6vectorIiSaIiEE12_M_check_lenEmPKc]+0x4c): undefined reference to `std::__throw_length_error(char const*)'
/tmp/ccCANy65.o: In function `__gnu_cxx::new_allocator<int>::deallocate(int*, unsigned long)':
vector.cpp:(.text._ZN9__gnu_cxx13new_allocatorIiE10deallocateEPim[_ZN9__gnu_cxx13new_allocatorIiE10deallocateEPim]+0x1c): undefined reference to `operator delete(void*)'
/tmp/ccCANy65.o: In function `__gnu_cxx::new_allocator<int>::allocate(unsigned long, void const*)':
vector.cpp:(.text._ZN9__gnu_cxx13new_allocatorIiE8allocateEmPKv[_ZN9__gnu_cxx13new_allocatorIiE8allocateEmPKv]+0x2c): undefined reference to `std::__throw_bad_alloc()'
vector.cpp:(.text._ZN9__gnu_cxx13new_allocatorIiE8allocateEmPKv[_ZN9__gnu_cxx13new_allocatorIiE8allocateEmPKv]+0x3c): undefined reference to `operator new(unsigned long)'
/tmp/ccCANy65.o:(.eh_frame+0x4b): undefined reference to `__gxx_personality_v0'
collect2: ошибка: выполнение ld завершилось с кодом возврата 1
  • Вопрос задан
  • 642 просмотра
Решения вопроса 2
Radjah
@Radjah
Цитирую второй результат в гугле по тексту ошибки:
Так как cout присутствует в стандартной библиотеке С++, для которой gcc требуется явное связывание с -lstdc++; g++ по умолчанию связывает стандартную библиотеку.

gcc vector.cpp -lstdc++ -o vector.o


Первый про это же, но на английском.
Ответ написан
Комментировать
@vanyamba-electronics
Это C++, а не C. У них разные линкеры.
g++ vector.cpp -o vector
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
keine-lust
@keine-lust
Компилировать код c++ компилятором си.. Браво)
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы