【问题标题】:How to compile C++ under Ubuntu Linux?如何在 Ubuntu Linux 下编译 C++?
【发布时间】:2009-11-08 12:49:18
【问题描述】:

我将以下代码从a previous question 剪切并粘贴到一个名为“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

C++ 代码(不是我的代码,我只是想运行它):

#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;
}

【问题讨论】:

标签: c++ gcc


【解决方案1】:

你应该使用g++,而不是gcc,来编译C++程序。

对于这个特定的程序,我只是输入了

make avishay

make 解决剩下的问题。也给你的可执行文件起一个像样的名字,而不是a.out

【讨论】:

  • 另一个 +1(如果可以的话)“制作”提示。我从来不知道 make 可以/会那样做!
  • “制作”在这里如何工作?我试过“make serial-rob.c”,它说“Nothing to be done for..”
  • 我认为诀窍是让它使用其隐含的规则。如果它对你有用,就像对我一样,那么“make serial-rob”(没有 .c)应该可以。
  • make serial-rob.c 不起作用的原因是因为该文件已经创建,它已经存在。另一方面,当 make 寻找一个名为 serial-rob 的文件时,它并不存在,但它有一个隐含的规则,将 *.c 变为 *.o 并将其变为 *
【解决方案2】:

你可能应该使用 g++ 而不是 gcc。

【讨论】:

  • 谢谢。就在昨天,我还不知道如何拼写“C++ 程序员”,而今天我是其中之一!
【解决方案3】:

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

g++ source.cpp -o source

如果省略-o 参数,生成的可执行文件将命名为a.out。无论如何,已经设置了可执行权限,所以不需要chmod 任何东西。

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

【讨论】:

  • 是的,代码是另一个问题(链接)的一部分,并在那里得到了应有的打击。为了快速测试,我不介意程序被称为 a.out,而且我知道 -o。我的主要问题是编译器名称,谢谢!
【解决方案4】:

更新您的 apt-get:

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

运行你的程序.cpp:

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

【讨论】:

  • 在其他答案中,这个更清晰,更切题。非常感谢。
【解决方案5】:

g++是linux下的C++编译器。代码看起来正确。您可能缺少这样使用的库参考:

g++ -l{此处的库名(数学 fns 使用“m”)} codefile.cpp

【讨论】:

    【解决方案6】:

    使用

    g++

    空格后跟程序名称。 例如:

    g++ prog.cpp

    如果在这种情况下文件名是“prog.cpp”。 如果你想运行程序写:

    ./prog
    

    所以我用了

    “进步”

    因为这是我的文件名。

    【讨论】:

    • 除非您使用-o 标志,否则输出文件将为“a.out”
    【解决方案7】:

    即使你可以通过 gcc 编译你的 c++ 代码 听起来好笑??是的。 试试看

    $  gcc avishay.cpp -lstdc++
    

    享受

    【讨论】:

      【解决方案8】:

      使用 g++。并确保您已安装相关库。

      【讨论】:

      • 我为 Ubuntu 支付了很多钱......哦等等,我没有!但是,是的,问题出在我如何调用编译器上。
      【解决方案9】:

      你可以使用 g++ --std=c++0x example.cpp -o example

      【讨论】:

        【解决方案10】:

        要编译source.cpp,运行

        g++ source.cpp
        

        此命令会将source.cpp 编译为同一目录下的文件a.out。 要运行编译后的文件,请运行

        ./a.out
        

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

        如果你想将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
          希望它对你有用。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2010-12-06
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2016-06-12
            • 2011-09-18
            • 2023-03-21
            • 2012-04-09
            相关资源
            最近更新 更多