Подтвердить что ты не робот

Как скомпилировать С++ под Ubuntu Linux?

Я вырезал и вставлял приведенный ниже код из предыдущего вопроса в файл с именем "avishay.cpp", а затем запускал

gcc avishay.cpp

чтобы получить следующие сообщения об ошибках от компоновщика. Что пошло не так, что я должен был сделать?

[email protected]:~/Projects/StackOverflow$ gcc -static avishay.cpp 
/tmp/cccRNW34.o: In function `__static_initialization_and_destruction_0(int, int)':
avishay.cpp:(.text+0x41): undefined reference to `std::ios_base::Init::Init()'
avishay.cpp:(.text+0x46): undefined reference to `std::ios_base::Init::~Init()'
/tmp/cccRNW34.o: In function `A::func()':
avishay.cpp:(.text._ZN1A4funcEv[A::func()]+0x11): undefined reference to `std::cout'
avishay.cpp:(.text._ZN1A4funcEv[A::func()]+0x16): 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*)'
avishay.cpp:(.text._ZN1A4funcEv[A::func()]+0x1e): 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> >&)'
avishay.cpp:(.text._ZN1A4funcEv[A::func()]+0x26): 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> >&))'
avishay.cpp:(.text._ZN1A4funcEv[A::func()]+0x36): undefined reference to `std::cout'
avishay.cpp:(.text._ZN1A4funcEv[A::func()]+0x3b): undefined reference to `std::basic_ostream<char, std::char_traits<char> >::operator<<(int)'
/tmp/cccRNW34.o:(.eh_frame+0x12): undefined reference to `__gxx_personality_v0'
collect2: ld returned 1 exit status

Код С++ (не мой код, я просто пытался его запустить):

#include <iostream>
using namespace std;

class A
{
private:
   int _dmember;

public:
   void func()
   {
     cout<<"Inside A!! "<<endl;
     cout<<_dmember; // crash when reach here.
   }
};

int main ()

{

    A* a= NULL;

    a->func(); // prints "Inside A!!!" 

    return 1;
}
4b9b3361

Ответ 1

Вы должны использовать g++, а не gcc для компиляции программ на С++.

Для этой конкретной программы я просто набрал

make avishay

и пусть make выяснить остальное. Кроме того, вместо a.out присваивает вашему исполняемому файлу достойное имя.

Ответ 2

Вероятно, вы должны использовать g++, а не gcc.

Ответ 3

Да, используйте g++ для компиляции. Он автоматически добавит все ссылки на libstdС++, которые необходимы для связывания программы.

g++ source.cpp -o source

Если вы опустите параметр -o, итоговый исполняемый файл будет называться a.out. В любом случае исполняемые разрешения уже установлены, поэтому нет необходимости в chmod.

Кроме того, код даст вам поведение undefined (и, вероятно, SIGSEGV), поскольку вы разыскиваете указатель NULL и пытаетесь вызвать функцию-член на объекте, который не существует, поэтому он, безусловно, не будет печатать что-нибудь. Вероятно, это сбой или какой-нибудь фанковый танец.

Ответ 4

g++ - это компилятор С++ под Linux. Код выглядит правильно. Возможно, вам не хватает ссылки на библиотеку, которая используется как таковая:

g++ -l {имя библиотеки здесь (math fns use "m" )} codefile.cpp

Ответ 5

Используйте

г ++

за которым следует имя программы. например:

g++ prog.cpp

если в этом случае имя файла было "prog.cpp". если вы хотите запустить программу write:

./prog

поэтому я использовал

"проги"

потому что это было мое имя файла.

Ответ 6

даже вы можете скомпилировать свой код на С++ с помощью gcc Звучит смешно?? Да. попробуйте

$  gcc avishay.cpp -lstdc++

пользоваться

Ответ 7

Обновите свой apt-get:

$ sudo apt-get update
$ sudo apt-get install g++

Запустите программу program.cpp:

$ g++ program.cpp
$ ./a.out

Ответ 8

Используйте g++. Убедитесь, что у вас установлены соответствующие библиотеки.

Ответ 9

вы можете использовать g++ --std = С++ 0x example.cpp -o example

Ответ 10

Чтобы скомпилировать source.cpp, запустите

g++ source.cpp

Эта команда будет компилировать source.cpp в файл a.out в том же каталоге. Чтобы запустить скомпилированный файл, запустите

./a.out

Если вы скомпилируете другой исходный файл с g++ source2.cpp, новый скомпилированный файл a.out перезапишет a.out, сгенерированный с помощью source.cpp

Если вы хотите скомпилировать source.cpp в конкретный файл, скажем compiledfile, запустить

g++ source.cpp -o compiledfile

или

g++ -o compiledfile source.cpp

Это создаст compiledfile, который является скомпилированным двоичным файлом. для запуска compiledfile, выполните

./compiledfile

Если g++ не находится в вашем $PATH, замените g++ на /usr/bin/g++.

Ответ 11

Установите gcc и попробуйте видео ниже.
Попробуйте следующее:
https://www.youtube.com/watch?v=A6v2Ceqy4Tk
Надеюсь, это сработает для вас.