fso*_*o94 4 c++ linux redhat c++17
我四处搜索,找不到在 Red Hat Enterprise Linux 7.5 Developer Workstation 上编译 c++17 源代码的明确方法。
我已经能够使用以下命令在 Fedora 上成功编译 C++17 源代码:
g++ -std=c++1z main.cpp -o main
我在我的 Red Hat 工作站上尝试了同样的事情,并收到一条消息,指出 g++ -std=c++1z 不是一个可识别的命令。
任何帮助或指导表示赞赏。
小智 7
请安装 CentOS SCL 存储库:
yum install centos-release-scl
Run Code Online (Sandbox Code Playgroud)
安装 GCC 版本 7 的 C++ 支持:
yum install devtoolset-7-gcc-c++ --enablerepo='centos-sclo-rh'
Run Code Online (Sandbox Code Playgroud)
在构建之前将环境切换到该编译器:
scl enable devtoolset-7 'bash'
Run Code Online (Sandbox Code Playgroud)
检查当前编译器:
which gcc
Run Code Online (Sandbox Code Playgroud)
对我来说找到这个太难了。
来源:https ://access.redhat.com/documentation/en-us/red_hat_developer_toolset/7/html/user_guide/chap-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
Run Code Online (Sandbox Code Playgroud)
(只是不要忘记替换4.6.2为您想要的任何版本的 GCC。)
例如,如果你这样做了./configure --prefix=/usr/local/mycompany/gcc-8.1.0/,那么make install编译器就会放在那个目录下 ( /usr/local/mycompany/gcc-8.1.0/) 而不是 in/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要在该已知位置搜索共享库的可执行文件。
当然,您必须遵守分发这些库的许可证,但这很容易。
| 归档时间: |
|
| 查看次数: |
2808 次 |
| 最近记录: |