标签: devtoolset

启用"软件集".RedHat开发人员工具集

我刚刚发现RedHat提供了这个"开发人员工具集",它允许我安装(当然还有)最新的gcc-4.7.2.我在Centos上使用它,但过程是一样的.

安装后,您可以通过发出以下命令启用此工具集的新bash会话:

scl enable devtoolset-1.1 bash
Run Code Online (Sandbox Code Playgroud)

这很好用.现在,我可以以某种方式将此添加到我的bashrc中,因为这实际上启动了一个新的bash会话吗?或者我应该更好地将它放在我的makefile中,以避免开始新的bash会话.有没有办法在makefile中发出这个?

redhat makefile centos devtoolset redhat-dts

10
推荐指数
1
解决办法
4460
查看次数

(如何)我可以在Centos/RHEL上使用带有devtoolset-7的新C++ 11 ABI吗?

我的目标是在Centos 7上使用gcc 7.2(和clang 6)构建与Centos 7目标兼容的可执行文件,而不安装devtoolset,但*使用较新的C++ ABI*.

较新的ABI修复了lib中的一些缺陷,这些缺陷在没有ABI更改的情况下无法修复.例如list :: size O(1)Vs O(n),字符串没有COW.

我猜测为什么在以下问题中可能无法实现这一点. -D_GLIBCXX_USE_CXX11_ABI = 1对CentOS 7上的devtoolset-7无效

c++ c++11 devtoolset centos7 software-collections

8
推荐指数
1
解决办法
1891
查看次数

如何在 Amazon Linux 2 上安装 devtoolset-8 / GCC 8

在 Amazon Linux 2 Docker 映像上,“yum install gcc”安装 gcc 7.3.1。

我想安装 gcc 8。它似乎通常可以作为“devtoolset-8”的一部分安装(https://www.softwarecollections.org/en/scls/rhscl/devtoolset-8/),但说明CentOS 或 RHEL 似乎不适用于 Amazon Linux。

那么在 Amazon Linux 上安装 gcc 8 的唯一方法是从源代码安装?

我还需要 devtoolset-8-toolchain,如何安装?

gcc devtoolset amazon-linux

8
推荐指数
1
解决办法
1353
查看次数

RedHat devtoolset - 分发编译代码的含义

我正在运行 CentOS 6.4 并且需要更高版本的 C++ 编译器来构建我的开发工具(在本例中为 Qt Creator)。

我不清楚使用 devtools 的含义,我希望有人能解释一下。

  1. 如果我使用 devtools 编译程序,这是否意味着可执行文件将在其他 Centos 6.4 安装上运行而无需更改?
  2. 或者..我知道我编译的程序必须附带库或其他文件吗?
  3. 如果是这样......我是否必须修改我的 C++ 代码以引用更高版本的库?或者这是由安装我编译的程序的人完成的

c++ libstdc++ libraries devtoolset redhat-dts

6
推荐指数
1
解决办法
843
查看次数

使用 Developer Toolset 7 时,RPM 构建无法定位 libelf.so.dts.1

我正在使用Developer Toolset 7 中的编译器为 Red Hat/CentOS 7(在 CentOS 上运行)编译软件 ,当我尝试创建 RPM 时,rpmbuild 失败并显示以下错误:

+ /usr/lib/rpm/find-debuginfo.sh --strict-build-id -m --run-dwz --dwz-low-mem-die-limit 10000000 --dwz-max-die-limit 110000000 /home/peter/src/foo/rpmbuild/BUILD/mypackage-5.4.0_10_243_g2564bd2ee3
extracting debug info from /home/peter/rpmbuild/BUILDROOT/mypackage-5.4.0_10_243_g2564bd2ee3-1.x86_64/path/to/my/bin/binary
eu-strip: error while loading shared libraries: libelf.so.dts.1: cannot open shared object file: No such file or directory
Run Code Online (Sandbox Code Playgroud)

我在使用 Toolset 3 时没有看到这个,基本上我所做的就是将构建脚本中的 3 更改为 7。

编辑:如果我禁用提取调试信息 ( %define debug_package %{nil}),我不会收到错误消息。

rpmbuild devtoolset

6
推荐指数
0
解决办法
447
查看次数

CentOS:从devtoolset使用GCC 4.7会导致错误地链接libstdc ++(未定义符号)

我正在使用CentOS 6.3的devtoolset-1.0来临时升级GCC版本。尽管我现在可以编译我的C ++应用程序,但最终的二进制文件缺少一些符号:

$ ldd -d -r myapp
$     [..]
$     libstdc++.so.6 => /usr/lib64/libstdc++.so.6 (0x0000003216e00000)
$     [..]
$ undefined symbol: _ZNSt8__detail15_List_node_base11_M_transferEPS0_S1_    (./myapp)
$ undefined symbol: _ZNSt8__detail15_List_node_base7_M_hookEPS0_      (./myapp)
$ undefined symbol: _ZNSt8__detail15_List_node_base9_M_unhookEv (./myapp)
Run Code Online (Sandbox Code Playgroud)

我发现,这些是一些新功能,在旧的libstdc ++中找不到,但是在较新的libstdc ++中找不到。在我的系统上,同时安装了libstdc ++(默认版本4.4.7)和devtoolset-1.0-libstdc ++-devel(4.7通过devtoolset)。有趣的是,来自devtoolset的libstdc ++再次链接到旧的:

$ cat /opt/centos/devtoolset-1.0/root/usr/lib/gcc/x86_64-redhat-linux/4.7.0/libstdc++.so
$ /* GNU ld script
$    Use the shared library, but some functions are only in
$    the static library, so try that secondarily.  */
$ OUTPUT_FORMAT(elf64-x86-64)
$ INPUT ( /usr/lib64/libstdc++.so.6 -lstdc++_nonshared )
Run Code Online (Sandbox Code Playgroud)

我真正想要的是替换libstdc ++绑定,但是我不知道该如何实现。我已经尝试设置LD_LIBRARY_PATH并指向devtoolset目录,但是libstdc ++仍然设置为旧位置。另外,符号链接也没有成功,因为它是ld脚本而不是实际的共享库。

gcc centos undefined-symbol devtoolset

5
推荐指数
1
解决办法
3008
查看次数

在 CentOS 7 上构建时如何链接 devtoolset-7 中的 libstdc++?

我想devtoolset-7在 CentOS 7 上构建 C++11 应用程序。我正在尝试使用该库,但CentOS 7 本身包含的<regex>版本4.8.4不支持它libstdc++

我已按照以下说明安装并启用 SCL/ devtoolset-7

$ sudo yum install centos-release-scl
$ sudo yum install devtoolset-7
$ scl enable devtoolset-7 bash
Run Code Online (Sandbox Code Playgroud)

此时,如果我调用g++,它就是正确的版本 (7.2.1),但是当我构建应用程序并在它们上运行时,它们仍然动态链接到系统上的ldd旧版本。/lib64/libstdc++.so.6可靠链接的最简单方法是什么devtoolset-7-libstdc++-devel-7.2.1?我使用 CMake 3 作为构建系统。

g++ libstdc++ c++11 devtoolset centos7

5
推荐指数
0
解决办法
1492
查看次数

C++项目使用现代编译器编译,但与过时的libstdc ++链接

考虑在Centos 7虚拟机或容器中构建和发布C++项目时的情况.默认gccCentos 74.8.为了允许开发人员使用现代C++,最新版本gcc(例如6.3)安装在作为CI服务器运行的Centos 7中.这提供了-std=c++14支持.

[builder@f7279ae9f33f build (master %)]$ /usr/bin/c++ -v 2>&1 | grep version
gcc version 4.8.5 20150623 (Red Hat 4.8.5-28) (GCC) 
[builder@f7279ae9f33f build (master %)]$ /opt/rh/devtoolset-6/root/usr/bin/c++  -v 2>&1 | grep version
gcc version 6.3.1 20170216 (Red Hat 6.3.1-3) (GCC) 
export CXX=/opt/rh/devtoolset-6/root/usr/bin/c++
make all -j4
...
Run Code Online (Sandbox Code Playgroud)

这是编译和链接命令的简短示例:

[ 78%] Building CXX object CMakeFiles/ucsdos.dir/src/merge_operator_string.cpp.o
/opt/rh/devtoolset-6/root/usr/bin/c++  -Ducsdos_EXPORTS -I/home/builder/src/dos/libucsdos/./src -I/home/builder/src/dos/libucsdos/./include -I/home/builder/src/dos/libucsdos/build/schema/cpp -I/home/builder/src/dos/libucsdos/build/schema -isystem /usr/local/include  -O2 -g -DNDEBUG -fPIC   -frtti …
Run Code Online (Sandbox Code Playgroud)

c++ gcc libstdc++ devtoolset

5
推荐指数
1
解决办法
775
查看次数

C++中签名的Integer值溢出?

我有一个遗留的代码库,我们正试图从中迁移devtoolset-4devtoolset-7.我注意到有关有符号整数溢出的有趣行为(int64_t具体而言).

有一个代码片段,用于检测整数溢出,同时乘以一大组整数:

// a and b are int64_t
int64_t product = a * b; 
if (b != 0 && product / b != a) {
    // Overflow
}
Run Code Online (Sandbox Code Playgroud)

这段代码与devtoolset-4一起工作正常.但是,使用devtoolset-7时,永远不会检测到溢出.

例如:当a = 83802282034166b = 98765432, product变为-5819501405344925872(显然值已溢出).

product / b结果价值等于a (83802282034166).因此,if情况永远不会成真.它的值应该根据overflown(负)product值计算:-5819501405344925872 / 98765432 = -58922451788

具有讽刺意味的是,数学是正确的,但它导致devtoolset-4的异常行为.

  • 编译器是否可以缓存该值(而不是重新评估它)导致此行为?
  • 或者编译器优化是否将语句转换product / b != aproduct != a * b并达到相同的溢出值(或者可能只是根据上面的语句跳过计算 …

c++ integer-overflow devtoolset

4
推荐指数
2
解决办法
601
查看次数

_GLIBCXX_USE_CXX11_ABI 在 RHEL6 和 RHEL7 上禁用?

我在 RHEL6 和 RHEL7 上安装了 gcc 5.2.1,看起来 _GLIBCXX_USE_CXX11_ABI 被禁用了。即使我手动运行它也不起作用-D_GLIBCXX_USE_CXX11_ABI=1 -std=c++14。这意味着我不会获得小字符串优化功能。例如,以下代码的输出始终为 8 和“micro not set”。对于 SSO,如果我们查看代码 bits/basic_string.h,std::string 的大小应至少为 16。有什么解决办法吗?

#include <string>
#include <iostream>

int main()
{
    std::cout << sizeof(std::string) << std::endl;

#if _GLIBCXX_USE_CXX11_ABI
    std::cout << "macro set" << std::endl;
#else
    std::cout << "macro not set" << std::endl;
#endif

}
Run Code Online (Sandbox Code Playgroud)

c++ libstdc++ devtoolset rhel6 rhel7

4
推荐指数
1
解决办法
2601
查看次数

登录时如何“scl启用devtoolset-8 bash”?

在我的centos7中,我尝试将scl enable devtoolset-8 bash命令放入~/.bashrc,但是当我登录时,进程scl enable devtoolset-8 bash会一次又一次启动,直到进程号达到用户最大进程号。

所以我该怎么做?

devtoolset centos7

4
推荐指数
1
解决办法
4630
查看次数

在没有 gcc8 的生产环境中运行使用 gcc8 构建的程序

我的开发/生产环境都是 CentOS-7.7。为了用 gcc-8.3.0 编译我的程序,我在我的开发环境中安装了“devtoolset-8”,但它不能像 CentOS7 最初附带的 gcc-4.8.5 一样使用。每次需要编译程序时,必须使用“scl enable devtoolset-8 -- bash”切换到gcc8而不是gcc4.8.5。

当程序部署到生产环境时,没有gcc8,也没有libstdc++.so.6.0.25,所以它不能运行。我猜 libstdc++.so.6.0.25 应该和 gcc8 一起发布?我既不能在生产环境上安装“devtoolset-8”,也不能在生产环境上从源代码构建 gcc8。CentOS官方yum repo安装的libstdc++版本是libstdc++.so.6.0.19,所以我的程序无法在production-env中加载。如何让这样的程序运行?

谢谢!请原谅我丑陋的英语。

gcc centos yum libstdc++ devtoolset

0
推荐指数
1
解决办法
210
查看次数