gpt4 book ai didi

c++ - 在 RedHat Linux Enterprise Developer Workstation 上编译 C++17 代码

转载 作者:搜寻专家 更新时间:2023-10-31 01:28:48 25 4
gpt4 key购买 nike

我四处搜索,找不到在 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 不是一个可识别的命令。

感谢任何帮助或指导。

最佳答案

您必须处理多个问题。

问题:如果您更换由 RedHat 安装(和支持)的 GCC 版本,您将失去支持。

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

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

这真的很容易做到,只有十几行命令。这是基本的,取自 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

(只是不要忘记用您想要的任何版本的 GCC 替换 4.6.2。)

例如,如果您执行 ./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 上构建的优势之一,即 promise 在您的实例上运行的某些东西将在所有其他实例上运行,并且不会破坏其他任何东西。

如果您的产品是 GPL,那么有一个简单的解决方案 - 只需静态链接到所需的库。 GCC 有编译标志:-static-libstdc++-static-libgcc。如果您的产品不是 GPL,那么您必须查看许可证。 IIRC,这些图书馆有特殊的豁免权,可以作为 GCC 编译的程序的一部分分发,但我不是律师。

否则,您可以将库作为共享库(.so 文件)分发,并下载安装脚本并将它们安装到已知位置。在构建您的应用程序时,设置链接器标志以设置可执行文件的 rpath 以在该已知位置搜索共享库。

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

关于c++ - 在 RedHat Linux Enterprise Developer Workstation 上编译 C++17 代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51255738/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com