在RedHat Linux Enterprise Developer工作站上编译C ++ 17代码

时间:2018-07-10 00:36:12

标签: c++ linux redhat c++17

我到处搜索,找不到在Red Hat Enterprise Linux 7.5开发人员工作站上编译c ++ 17源代码的明确方法。

我已经能够使用以下命令在Fedora上成功编译C ++ 17源代码:

g ++ -std = c ++ 1z main.cpp -o main

我在Red Hat工作站上尝试了相同的操作,并收到一条消息,指出g ++ -std = c ++ 1z是无法识别的命令。

感谢任何帮助或指导。

2 个答案:

答案 0 :(得分:1)

您必须处理多个问题。

问题:如果替换RedHat安装(并支持)的GCC版本,则会失去支持。

简单的答案是“不要那样做”。

使用--prefix构建配置参数,将自己的版本构建并安装到其他目​​录中,而不是替换已安装的GCC。

这真的很容易做到,只有十几行命令。以下是从GCC Wiki中摘录的基本内容:

tar xzf gcc-4.6.2.tar.gz
cd gcc-4.6.2
./contrib/download_prerequisites
cd ..
mkdir objdir
cd objdir
$PWD/../gcc-4.6.2/configure --prefix=$HOME/GCC-4.6.2 --enable-languages=c,c++,fortran,go
make
make install

(请不要忘记将4.6.2替换为所需的GCC版本。)

例如,如果您执行./configure --prefix=/usr/local/mycompany/gcc-8.1.0/,则make install会将编译器放置在该目录(/usr/local/mycompany/gcc-8.1.0/)下,而不是放在/usr//usr/local/

您可以通过在所有可执行文件中添加前缀或后缀来进一步减少混乱。这样,您将执行的g++是哪个版本就没有歧义。例如,如果您使用--program-suffix=-8.1.0,则对g++-8.1.0的每次调用显然都将是您的新编译器,而g++将使用系统默认值。

问题:glibc兼容性

如果并行安装新版本的GCC,则使用该编译器编译的任何应用程序都将依赖于glibc的较新版本,不能保证该版本将在其他RHEL计算机上存在。这打破了在RHEL上进行构建的优势之一,即承诺在您的实例上运行的某些东西将在所有其他实例上运行,而不会破坏其他任何东西。

如果您的产品经过GPL认证,那么有一个简单的解决方案-只需静态链接所需的库即可。 GCC为此具有编译标志:-static-libstdc++-static-libgcc。如果您的产品不是GPL,则必须查看许可证。在IIRC中,这些图书馆有特殊的要求,可以作为GCC编制的程序的一部分进行分发,但是我不是律师。

如果失败,您可以将这些库作为共享库(.so文件)进行分发,并下载安装脚本并将其安装到已知位置。在构建应用程序时,请设置链接器标志以设置可执行文件的rpath,以便在该已知位置搜索共享库。

当然,您必须遵守许可证才能分发这些库,但这很容易。

答案 1 :(得分:0)

请安装 CentOS SCL 存储库:

yum install centos-release-scl

为 GCC 版本 7 安装 C++ 支持:

yum install devtoolset-7-gcc-c++ --enablerepo='centos-sclo-rh'

在构建之前将环境切换到此编译器:

scl enable devtoolset-7 'bash'

检查当前编译器:

which gcc

对我来说很难找到。

来源:https://access.redhat.com/documentation/en-us/red_hat_developer_toolset/7/html/user_guide/chap-gcc