C++ 如何编译C++;在Ubuntu Linux下?

C++ 如何编译C++;在Ubuntu Linux下?,c++,gcc,C++,Gcc,我将下面的代码从剪切粘贴到一个名为“avishay.cpp”的文件中,然后运行 gcc avishay.cpp 仅从链接器获取以下错误消息。出了什么问题,我该怎么办 carl@carl-ubuntu:~/Projects/StackOverflow$ gcc -static avishay.cpp /tmp/cccRNW34.o: In function `__static_initialization_and_destruction_0(int, int)': avishay.cpp:(.

我将下面的代码从剪切粘贴到一个名为“avishay.cpp”的文件中,然后运行

gcc avishay.cpp
仅从链接器获取以下错误消息。出了什么问题,我该怎么办

carl@carl-ubuntu:~/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
carl@carl-ubuntu:~/Projects/StackOverflow$gcc-static avishay.cpp
/tmp/cccRNW34.o:在函数“静态初始化”和“销毁0(int,int)”中:
avishay.cpp:(.text+0x41):对“std::ios_base::Init::Init()”的未定义引用
avishay.cpp:(.text+0x46):对“std::ios_base::Init::~Init()”的未定义引用
/tmp/cccRNW34.o:在函数'A::func()'中:
avishay.cpp:(.text._ZN1A4funcEv[A::func()]+0x11):对“std::cout”的未定义引用

AvISHay.CPP:(.T.NN1A4SimeV[A::FACKEOS])+0x16:未定义的引用“STD::Basic IoSooS&STD::运算符< P>您应该使用<代码> G++< /COD>,而不是<代码> GCC ,编译C++程序。 对于这个特定的程序,我只是键入

make avishay

然后让
make
算出剩下的。给你的可执行文件一个体面的名字,而不是<代码> .Auth

你可能应该使用G++而不是GCC。

< P> G++是Linux下的C++编译器。代码看起来是正确的。您可能缺少一个库引用,该库引用被用作:


g++-l{library name here(math fns使用“m”)}codefile.cpp

使用g++。并确保安装了相关的库。

是的,使用g++进行编译。它将自动添加链接程序所需的对libstdc++的所有引用

g++ source.cpp -o source
如果省略
-o
参数,则生成的可执行文件将命名为
a.out
。在任何情况下,已设置可执行权限,因此无需
chmod
任何操作

此外,当您解除对空指针的引用并试图调用不存在的对象上的成员函数时,代码将为您提供未定义的行为(可能还有SIGSEGV),因此它肯定不会打印任何内容。它可能会崩溃或跳一些时髦的舞蹈。

使用

g++

空格后跟程序名。 e、 g:

g++prog.cpp

如果文件名在本例中为“prog.cpp”。 如果要运行程序写入,请执行以下操作:

./prog
所以我用

“进展”


因为它是我的文件名。

< P>你可以通过GCC编译你的C++代码。 听起来很有趣??是的。 试试看

享受

更新您的apt获取:

$ sudo apt-get update
$ sudo apt-get install g++
运行您的程序。cpp:

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

安装gcc并尝试下面的视频。
试试这个:


希望它对您有用。

您可以使用g++--std=c++0x example.cpp-o example来编译
source.cpp
,运行

g++ source.cpp
此命令将编译
source.cpp
到同一目录中的文件
a.out
。 要运行已编译的文件,请运行

./a.out
如果使用
g++source2.cpp
编译另一个源文件,则新编译的文件
a.out
将覆盖使用
source.cpp
生成的
a.out

如果要将
source.cpp
编译为特定文件,请说
compiledfile
, 跑

这将创建
编译文件
,它是已编译的二进制文件。要运行
编译文件
,请运行

./compiledfile

如果
g++
不在
$PATH
中,请将g++替换为
/usr/bin/g++

谢谢。就在昨天,我不知道如何拼写“C++程序员”,而今天我就是其中之一!另一个+1(如果我可以的话)作为“制造”提示。我从来不知道make能/会那样做!“制造”在这里是如何工作的?我试过“makeserialrob.c”,它说“没什么可做的”,我想,诀窍是让它使用它的隐式规则。如果它像我一样适用于你,那么“make serial rob”(不带.c)应该可以。之所以
make serial rob.c
不起作用,是因为该文件已经生成,它已经存在。另一方面,make查找名为serial rob的文件时,它不在那里,但它有一个隐式规则,可以将*.c转换成*.o,然后转换成*我花了很多钱购买Ubuntu。。。哦,等等,我没有!但是,是的,问题在于我如何调用编译器。是的,代码是另一个问题(链接)的一部分,并在那里受到了应有的打击。为了快速测试,我不介意程序被称为a.out,而且我知道-o。我的主要问题是编译器名称,谢谢!输出文件的副本将是“a.out”,除非您使用
-o
标记。在其他答案中,此答案更清晰、更切题。谢谢。
./a.out
g++ source.cpp -o compiledfile
g++ -o compiledfile source.cpp
./compiledfile