【问题标题】:Ubuntu compilers (C++)Ubuntu 编译器 (C++)
【发布时间】:2012-10-24 08:50:44
【问题描述】:

我是 Linux 编程新手(Ubuntu 服务器)。

指令有什么区别:

c++ -c  main.cpp -o main.o -lstdc++
c++ -c  Console.cpp -o Console.o -lstdc++
c++ main.o Console.o -o App1

还有这个:

g++ -c  main.cpp -o main.o -lstdc++
g++ -c  Console.cpp -o Console.o -lstdc++
g++ main.o Console.o -o App1

这些说明是否相同? c++指令是否为g++提供了另一个名称?

【问题讨论】:

  • 为什么要在编译命令行指定-lstdc++?它只在链接行上有意义,但无论如何都假定 libstdc++。

标签: c++ linux ubuntu g++


【解决方案1】:

update-alternatives --display c++

【讨论】:

    【解决方案2】:

    是的,默认是 g++。您可以使用update-alternatives --display c++ 进行检查;通过sudo update-alternatives c++更改它

    update-alternatives --config c++
    There are 2 choices for the alternative c++ (providing /usr/bin/c++).
    
      Selection    Path              Priority   Status
    ------------------------------------------------------------
    * 0            /usr/bin/g++       20        auto mode
      1            /usr/bin/clang++   10        manual mode
      2            /usr/bin/g++       20        manual mode
    

    【讨论】:

      【解决方案3】:

      我相信他们都使用 GNU C++ 编译器。所以是的,它们是一样的。

      【讨论】:

      • c++ 可以链接到g++,但不是必须的。
      【解决方案4】:

      它们可能是相同的。您可以明确检查:

      哪个c++

      /usr/bin/c++

      ls -l /usr/bin/c++

      /etc/alternatives/c++

      ls -l etc/alternatives/c++

      /usr/bin/g++

      【讨论】:

        【解决方案5】:

        是的,它们是一样的,正在输入

        which c++
        

        告诉你c++ 实际上是/usr/bin/c++。然后输入

        ll /usr/bin/c++
        

        会给你

        lrwxrwxrwx 1 root root 21 Sep  4 17:00 /usr/bin/c++ -> /etc/alternatives/c++*
        

        然后

        ll /etc/alternatives/c++
        

        会给你

        lrwxrwxrwx 1 root root 12 Sep  4 17:00 /etc/alternatives/c++ -> /usr/bin/g++*
        

        所以是的,它们是相同的(有一个从 c++ 到 g++ 的符号链接)。

        【讨论】:

        • 这只是默认值,/etc/alternatives/c++ 不必指向/usr/bin/g++
        【解决方案6】:

        自己找找吧:

        $ ls -l /usr/bin/c++ /usr/bin/g++ /etc/alternatives/c++
        

        lrwxrwxrwx 1 root root 12 Jun 2 19:41 /etc/alternatives/c++ -> /usr/bin/g++*
        lrwxrwxrwx 1 root root 21 Jun 2 19:41 /usr/bin/c++ -> /etc/alternatives/c++*
        lrwxrwxrwx 1 root root 7 2012 年 3 月 13 日 /usr/bin/g++ -> g++-4.6*

        或者做:

        $ c++ -v
        

        对比

        $ g++ -v
        

        【讨论】:

          【解决方案7】:

          g++ 表示 GNU C++ 编译器。

          c++ 表示非特定的 C++ 编译器,但它必须链接到特定的编译器。如果在您的情况下,这只是指向 GNU C++ 编译器的符号链接,那么没有区别。但是,您可以使符号链接指向不同的 C++ 编译器。

          【讨论】:

            【解决方案8】:

            是的。

            以下是找出这些类型的方法

            查找可执行文件的路径:

            which c++
            

            检查它是文件还是符号链接:

            ls -ald `which c++`
            

            要检查它是什么类型的文件:

            file `which c++`
            

            要获得可用于将其与其他文件进行比较的校验和:

            md5sum `which c++`
            

            这是检查 c++ 和 g++ 是否相等的一种方法:

            [ `md5sum $(which c++) | cut -d' ' -f1` == `md5sum $(which g++) | cut -d' ' -f1` ] && echo Yes, equal content || echo No, unequal content
            

            【讨论】:

              猜你喜欢
              • 2014-04-28
              • 2021-02-22
              • 1970-01-01
              • 2015-12-09
              • 2021-01-02
              • 1970-01-01
              • 2017-12-07
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多