代码之家  ›  专栏  ›  技术社区  ›  Carl Smotricz

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

  •  28
  • Carl Smotricz  · 技术社区  · 15 年前

    我剪切并粘贴了以下代码 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;
    }
    
    11 回复  |  直到 15 年前
        1
  •  68
  •   Thomas    15 年前

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

    对于这个特定的程序,我刚键入

    make avishay
    

    make 把剩下的弄清楚。也为可执行文件命名,而不是 a.out .

        2
  •  11
  •   jackrabbit    15 年前

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

        3
  •  9
  •   blwy10    15 年前

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

    g++ source.cpp -o source
    

    如果你省略了 -o 参数,结果可执行文件将被命名为 a.out . 在任何情况下,都已经设置了可执行权限,因此无需 chmod 什么都行。

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

        4
  •  5
  •   Brian    10 年前

    更新apt-get:

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

    运行program.cpp:

    $ g++ program.cpp
    $ ./a.out
    
        5
  •  4
  •   monksy    15 年前

    G++是Linux下的C++编译器。代码看起来是正确的。您可能缺少一个库引用,该库引用的使用方式如下:

    g++-l库名称(数学fns使用“m”)codefile.cpp

        6
  •  4
  •   chris    12 年前

    使用

    G+

    空格后跟程序名。 例如:

    g++ prog.cpp

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

    ./prog
    

    所以我用过

    “PROG”

    因为它是我的文件名。

        7
  •  4
  •   Javed    11 年前

    甚至可以通过GCC编译C++代码。 听起来很有趣?是的。 试试看

    $  gcc avishay.cpp -lstdc++
    

    享受

        8
  •  2
  •   user59634    15 年前

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

        9
  •  1
  •   MSharq    9 年前

    您可以使用g++——STD= C++0x示例.CPP-O示例

        10
  •  1
  •   x0x hardtop    9 年前

    编译 source.cpp ,运行

    g++ source.cpp
    

    此命令将编译 来源于 归档 a.out 在同一个目录中。 要运行已编译的文件,请运行

    ./a.out
    

    如果编译另一个源文件, g++ source2.cpp ,新编译的文件 A.退出 将覆盖 A. 生成与 来源于

    如果你想编译 来源于 到一个特定的文件,比如 compiledfile , 运行

    g++ source.cpp -o compiledfile
    

    g++ -o compiledfile source.cpp
    

    这将创建 编译文件 这是编译后的二进制文件。运行 编译文件 运行

    ./compiledfile
    

    如果 g++ 不在你的身边 $PATH ,将g++替换为 /usr/bin/g++ .

        11
  •  0
  •   S.L. Barth is on codidact.com Monika Restecka    9 年前

    安装gcc并尝试以下视频。
    试试这个:
    https://www.youtube.com/watch?v=A6v2Ceqy4Tk
    希望它对你有用。