• 结合python版本安装python-devel gcc和g++的区别 安装前做yum搜索


    [test@ecs autocloudservices]# yum install python-devel
    Loaded plugins: fastestmirror
    Loading mirror speeds from cached hostfile
    Package python-devel-2.7.5-80.el7_6.x86_64 already installed and latest version
    Nothing to do
    [test@ecs autocloudservices]# which yum
    /usr/bin/yum


    [test@ecs autocloudservices]# yum search python3 | grep devel
    boost-python36-static.x86_64 : The Python3 Boost C++ static development
    python36-cairo-devel.x86_64 : Libraries and headers for python36-cairo
    python36-greenlet-devel.x86_64 : C development headers for python36-greenlet
    python36-qt5-devel.x86_64 : Development files for python3-qt5
    boost-python36-devel.x86_64 : Shared object symbolic links for Boost.Python 3
    boost169-mpich-python3-devel.x86_64 : Shared library symbolic links for
    boost169-openmpi-python3-devel.x86_64 : Shared library symbolic links for
    boost169-python3-devel.x86_64 : Shared object symbolic links for Boost.Python 3
    python34-devel.x86_64 : Libraries and header files needed for Python 3
    : development
    python36-devel.x86_64 : Libraries and header files needed for Python development
    python36-gobject-devel.x86_64 : Development files for embedding Python 3.6
    python36-idle.x86_64 : A basic graphical development environment for Python
    python36-pillow-devel.x86_64 : Development files for pillow
    python36-sip-devel.x86_64 : Files needed to generate Python bindings for any C++
    shiboken-python36-devel.x86_64 : Development files for shiboken
    [test@ecs autocloudservices]#

    注意这里是关键yum install python36-devel.x86_64

    yum reinstall gcc gcc-c++

    Downloading packages:
    (1/2): gcc-c++-4.8.5-28.el7_5.1.x86_64.rpm | 7.2 MB 00:00:00 
    (2/2): gcc-4.8.5-28.el7_5.1.x86_64.rpm | 16 MB 00:00:00 
    ---------------------------------------------------------------------------------------------------------------------------------------------------------
    Total 47 MB/s | 23 MB 00:00:00 
    Running transaction check
    Running transaction test
    Transaction test succeeded
    Running transaction
    Installing : gcc-4.8.5-28.el7_5.1.x86_64 1/2 
    Installing : gcc-c++-4.8.5-28.el7_5.1.x86_64 2/2 
    Verifying : gcc-4.8.5-28.el7_5.1.x86_64 1/2 
    Verifying : gcc-c++-4.8.5-28.el7_5.1.x86_64 2/2

    Installed:
    gcc.x86_64 0:4.8.5-28.el7_5.1 gcc-c++.x86_64 0:4.8.5-28.el7_5.1

    Complete!
    [root@txy ~]# which gcc
    /usr/bin/gcc
    [root@txy ~]# which g++
    /usr/bin/g++

    https://gcc.gnu.org/onlinedocs/gcc/Invoking-G_002b_002b.html 

    Next: , Previous: , Up: Invoking GCC   [Contents][Index]


    3.3 Compiling C++ Programs

    C++ source files conventionally use one of the suffixes ‘.C’, ‘.cc’, ‘.cpp’, ‘.CPP’, ‘.c++’, ‘.cp’, or ‘.cxx’; C++ header files often use ‘.hh’, ‘.hpp’, ‘.H’, or (for shared template code) ‘.tcc’; and preprocessed C++ files use the suffix ‘.ii’. GCC recognizes files with these names and compiles them as C++ programs even if you call the compiler the same way as for compiling C programs (usually with the name gcc).

    However, the use of gcc does not add the C++ library. g++ is a program that calls GCC and automatically specifies linking against the C++ library. It treats ‘.c’, ‘.h’ and ‘.i’ files as C++ source files instead of C source files unless -x is used. This program is also useful when precompiling a C header file with a ‘.h’ extension for use in C++ compilations. On many systems, g++ is also installed with the name c++.

    When you compile C++ programs, you may specify many of the same command-line options that you use for compiling programs in any language; or command-line options meaningful for C and related languages; or options that are meaningful only for C++ programs. See Options Controlling C Dialect, for explanations of options for languages related to 

    Using the GNU Compiler Collection (GCC): Link Options https://gcc.gnu.org/onlinedocs/gcc/Link-Options.html

    c++ - What is the difference between g++ and gcc? - Stack Overflow https://stackoverflow.com/questions/172587/what-is-the-difference-between-g-and-gcc/172592#172592

    gcc and g++ are compiler-drivers of the GNU Compiler Collection (which was once upon a time just the GNU C Compiler).

    Even though they automatically determine which backends (cc1 cc1plus ...) to call depending on the file-type, unless overridden with -x language, they have some differences.

    The probably most important difference in their defaults is which libraries they link against automatically.

    According to GCC's online documentation link options and how g++ is invokedg++ is equivalent to gcc -xc++ -lstdc++ -shared-libgcc (the 1st is a compiler option, the 2nd two are linker options). This can be checked by running both with the -v option (it displays the backend toolchain commands being run).

    gcc和g++的区别 - 苦涩的茶 - 博客园 https://www.cnblogs.com/liushui-sky/p/7729838.html

    gcc和g++的区别
     
      我们在编译c/c++代码的时候,有人用gcc,有人用g++,于是各种说法都来了,譬如c代码用gcc,而c++代码用g++,或者说编译用gcc,链接用g++,一时也不知哪个说法正确,如果再遇上个extern "C",分歧就更多了,这里我想作个了结,毕竟知识的目的是令人更清醒,而不是更糊涂。
     
    误区一:gcc只能编译c代码,g++只能编译c++代码
    两者都可以,但是请注意:
    1.后缀为.c的,gcc把它当作是C程序,而g++当作是c++程序;后缀为.cpp的,两者都会认为是c++程序,注意,虽然c++是c的超集,但是两者对语法的要求是有区别的,例如:
    #include <stdio.h>
    int main(int argc, char* argv[])
    {
       if(argv == 0) return;
       printString(argv);
       return;
    }
    int printString(char* string)
    {
      sprintf(string, "This is a test. ");
    }
    如果按照C的语法规则,OK,没问题,但是,一旦把后缀改为cpp,立刻报三个错:
    “printString未定义”;
    “cannot convert `char**' to `char*”;
    ”return-statement with no value“;
        这3个错分别对应前面红色标注的部分。可见C++的语法规则更加严谨一些。
     
    2.编译阶段,g++会调用gcc,对于c++代码,两者是等价的,但是因为gcc命令不能自动和C++程序使用的库联接,所以通常用g++来完成链接,为了统一起见,干脆编译/链接统统用g++了,这就给人一种错觉,好像cpp程序只能用g++似的。
     
    误区二:gcc不会定义__cplusplus宏,而g++会
    实际上,这个宏只是标志着编译器将会把代码按C还是C++语法来解释,如上所述,如果后缀为.c,并且采用gcc编译器,则该宏就是未定义的,否则,就是已定义。
     
    误区三:编译只能用gcc,链接只能用g++
    严格来说,这句话不算错误,但是它混淆了概念,应该这样说:编译可以用gcc/g++,而链接可以用g++或者gcc -lstdc++。因为gcc命令不能自动和C++程序使用的库联接,所以通常使用g++来完成联接。但在编译阶段,g++会自动调用gcc,二者等价。
     
    误区四:extern "C"与gcc/g++有关系
    实际上并无关系,无论是gcc还是g++,用extern "c"时,都是以C的命名方式来为symbol命名,否则,都以c++方式命名。试验如下:
    me.h
    extern "C" void CppPrintf(void);
     
    me.cpp:
    #include <iostream>
    #include "me.h"
    using namespace std;
    void CppPrintf(void)
    {
         cout << "Hello ";
    }
     
    test.cpp:
    #include <stdlib.h>
    #include <stdio.h>
    #include "me.h"        
    int main(void)
    {
        CppPrintf();
        return 0;
    }
     
    1. 先给me.h加上extern "C",看用gcc和g++命名有什么不同
    [root@root G++]# g++ -S me.cpp     //g++的参数-S: 是指把文件编译成为汇编代码
    [root@root G++]# less me.s
    .globl _Z9CppPrintfv        //注意此函数的命名
            .type   CppPrintf, @function
    [root@root GCC]# gcc -S me.cpp
    [root@root GCC]# less me.s
    .globl _Z9CppPrintfv        //注意此函数的命名
            .type   CppPrintf, @function
    完全相同!
                   
    2. 去掉me.h中extern "C",看用gcc和g++命名有什么不同
    [root@root GCC]# gcc -S me.cpp
    [root@root GCC]# less me.s
    .globl _Z9CppPrintfv        //注意此函数的命名
            .type   _Z9CppPrintfv, @function
    [root@root G++]# g++ -S me.cpp
    [root@root G++]# less me.s
    .globl _Z9CppPrintfv        //注意此函数的命名
            .type   _Z9CppPrintfv, @function
    完全相同!
    【结论】完全相同,可见extern "C"与采用gcc/g++并无关系,以上的试验还间接的印证了前面的说法:在编译阶段,g++是调用gcc的。
    转自:http://lpy999.blog.163.com/blog/static/117372061201182042232511/
     
     
     
     
  • 相关阅读:
    python中重要的模块--asyncio
    Mysql连接报错:1130-host ... is not allowed to connect to this MySql server如何处理
    驱动精灵扩展版(集成万能网卡驱动)无法自动识别网卡的解决方案
    ROS HTB限速失败原因分析和需注意事项
    按键精灵saystring无法使用的几种解决方案
    ESXI5-WIN2008R2安装域控以及额外域笔记
    centos如何使用utc时间
    NFS的安装以及windows/linux挂载linux网络文件系统NFS
    用命令行方式关闭CentOS防火墙
    CentOS6.4 上搭建NIS网络信息服务器
  • 原文地址:https://www.cnblogs.com/rsapaper/p/8040502.html
Copyright © 2020-2023  润新知