我到处搜索,找不到在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是无法识别的命令。
感谢任何帮助或指导。
答案 0 :(得分:1)
您必须处理多个问题。
简单的答案是“不要那样做”。
使用--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