问题标签 [gcc7]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c++ - 包括在 GCC 4.8 中是必需的吗?
我继承了一个 2014 年编写的 C++ 项目,并且确实使用 GCC 4.8 进行编译。在一个特定的文件中,当前在<random>
C++ 标准库的头文件中找到的几个类被实例化。其中包括mt19937
、random_device
、uniform_real_distribution
和normal_distribution
。
当我使用 GCC 7.3 编译此文件时,我收到一条错误消息,指出这些类未在std
命名空间中定义。当我包含<random>
.
我的问题是为什么在 GCC 4.8 中不会发生此错误?这些类以前是在不同的标题下找到的吗?
linux - LeakSanitizer 不能在 Ubuntu 18.04 的 gdb 下工作?
我最近将我的 Linux 开发 VM 从 Ubuntu 16.04 升级到了 18.04,并注意到一件事发生了变化。这是在 x86-64 上。在 16.04 中,我一直有这个工作流程,我将使用 gcc(5.4,16.04 中的库存版本)和-fsanitize=address
and构建我正在处理的项目-O0 -g
,然后通过 gdb(7.11.1,也是Ubuntu 附带的版本)。这工作得很好,最后,如果 LeakSanitizer 检测到内存泄漏,它会生成泄漏报告。
在 18.04 中,这似乎不再起作用了;LeakSanitizer 抱怨在 ptrace 下运行:
然后程序崩溃:
我不确定是什么导致了新行为。在 18.04 上,我使用默认的 gcc (7.3.0) 进行构建,使用-fsanitize=address -O0 -g
默认的 gdb (8.1.0) 进行调试。可以以某种方式重新启用旧行为吗?或者我是否需要更改我的工作流程并在终止程序之前从程序中分离以获得泄漏报告?
gcc - 如何使用 musl-gcc 编译 GTK+ 基础应用程序?
我用 gcc 和 musl-gcc 编译了这个 GTK+ 示例应用程序。两者都产生了一个二进制文件,但是 musl-gcc 产生的二进制文件不能正确执行并显示一堆错误。
注意:我安装了 musl-libc 和 libgtk3 开发版本。
注意: ldd 命令日志对于 gcc 和 musl-gcc 生成的二进制文件几乎是相同的。
GTK+ 示例应用程序:
编译命令:
musl-gcc -Wall -g -o main main.c -I/usr/include/gtk-3.0 -I/usr/include/at-spi2-atk/2.0 -I/usr/include/at-spi-2.0 - I/usr/include/dbus-1.0 -I/usr/lib/x86_64-linux-gnu/dbus-1.0/include -I/usr/include/gtk-3.0 -I/usr/include/gio-unix-2.0/ -I/usr/include/cairo -I/usr/include/pango-1.0 -I/usr/include/harfbuzz -I/usr/include/pango-1.0 -I/usr/include/atk-1.0 -I/usr /include/cairo -I/usr/include/pixman-1 -I/usr/include/freetype2 -I/usr/include/libpng16 -I/usr/include/freetype2 -I/usr/include/libpng16 -I/usr /include/gdk-pixbuf-2.0 -I/usr/include/libpng16 -I/usr/include/glib-2.0 -I/usr/lib/x86_64-linux-gnu/glib-2.0/include -L/usr/lib /x86_64-linux-gnu -lgtk-3 -lgdk-3 -lpangocairo-1.0 -lpango-1.0 -latk-1.0 -lcairo-gobject -lcairo -lgdk_pixbuf-2.0 -lgio-2.0 -lgobject-2.0 -lglib-2.0
musl-gcc 生成的二进制日志:
gcc 生成的二进制文件的ldd命令日志:
用于 musl-gcc 生成的二进制文件的ldd命令日志:
c++ - 在数组索引内按 N 递增变量
有人可以告诉我这样的构造在 C++ 中是否有效(即不是 UB)。因此,我有一些段错误,并花了几天时间试图弄清楚那里发生了什么。
所以,当然我做了一些分析,GCC(5/7)和clang(3.8)都生成相同的代码。先添加后访问。
那么,我可以假设这样的行为是标准行为吗?
arm64 - 跨工具链构建时 arm-trusted-firmware 编译出错
我正在研究 Renesas 的 rcar gen 3 平台,尤其是 arm-trusted-firmware 级别。
我使用 Gcc v5.4 通过命令构建了 BL31
$ make ARCH=aarch64 CROSS_COMPILE=aarch64-linux-gnu- PLAT=rcar LSI=M3 RCAR_GEN3_ULCB=1 RCAR_LOSSY_ENABLE=1 RCAR_DRAM_SPLIT=2 PMIC_LEVEL_MODE=0 bl31
但我遇到了以下错误:
同样的错误:https ://github.com/ARM-software/tf-issues/issues/417
汇编代码是正确的,显然不是问题。
似乎它取决于编译器。我试图安装 gcc/g++ 7.4 交叉:
在 Ubuntu 16.04 上,并将 Makefile 修改为使用 gcc-7 (cross)、g++-7 (cross),但仍然出现此错误。我该如何克服这个错误?
c++ - GCC7 的 CMake 项目“未定义的引用”错误,但不是 GCC4.8
将共享库 (Foo) 与另一个内部静态库 (Bar) 链接时,我们遇到了一个奇怪的问题。Bot 库构建在同一台机器上的同一 CMake 构建目录中。
很明显,共享库中的代码必须与位置无关,因此我们在任何静态库依赖项上设置 PIC,如下所示:
我们以常规方式链接库,使用target_link_libraries(Foo PUBLIC Bar)
.
这适用于 GCC 4.8、ld 2.22 和 CMake 3.10.1。
但是,由于某种原因,使用 GCC 7、ld 2.29.1 和 CMake 3.10.2 链接失败undefined reference
,Bar 中的不同函数出现多个错误。函数在 Bar 中定义和实现,使用 Foo 并且整个东西用 GCC4.8 编译。那么给了什么?
我们也知道双重 ABI 情况和std::string
. (请参阅https://stackoverflow.com/a/49119902/2095190)但是错误不符合模式。
我有一些想法,尽管他们都没有解释为什么它可以与旧工具链一起使用:
- 可能链接器选项的顺序是一个问题?
- 缺少传递依赖?(请参阅答案:使用 CMake 与其他静态库链接的静态库 - 一个有效,一个无效。为什么?)
我们的项目比较复杂,下周我会尝试隔离错误。
c++ - 相同的 AVX2 程序在 gcc 和 msvc 中产生不同的结果
我正在尝试使用 AVX2 增加 md5 哈希的吞吐量。我使用了 github 用户提供的 simd_md5 库。
在 msvc2013 上,我得到了所有 8 个缓冲区的所需结果,但是在 linux 上,当我只为前 4 个缓冲区运行相同的代码时,结果匹配和下一个 4 个缓冲区,结果以某种方式移动。
我在这里附上了相同的代码和示例
文件
md5_common.h
主文件
44077f4856c7d6c519fce5dfc0fb1fcf
44077f4856c7d6c519fce5dfc0fb1fcf
44077f4856c7d6c519fce5dfc0fb1fcf
44077f4856c7d6c519fce5dfc0fb1fcf
44077f4856c7d6c519fce5dfc0fb1fcf
44077f4856c7d6c519fce5dfc0fb1fcf
44077f4856c7d6c519fce5dfc0fb1fcf
44077f4856c7d6c519fce5dfc0fb1fcf
这与 MSVC 2013 v120 c 编译器一起正常工作
但是使用 gcc 7.2 编译器我得到
44077f4856c7d6c519fce5dfc0fb1fcf
44077f4856c7d6c519fce5dfc0fb1fcf
44077f4856c7d6c519fce5dfc0fb1fcf
44077f4856c7d6c519fce5dfc0fb1fcf
56c7d6c519fce5dfc0fb1fcf00000000
56c7d6c519fce5dfc0fb1fcf00000000
56c7d6c519fce5dfc0fb1fcf00000000
56c7d6c519fce5dfc0fb1fcf00000000
一些专家可以帮助我为什么相同的代码在编译器中表现不同..没有启用优化..
c++ - 使用 __single_client_alloc 找到了一些旧代码 - 我该如何恢复它?
我在网上找到了一个我想使用的旧包。其中一个头文件包括以下几行:
我的 GCC_VERSION 是 7003,__single_client_alloc
显然早已不复存在。 single_client_alloc
也存在了一段时间,但我不知道它是否仍然存在,或者如果存在,它存在于哪个标题中。
看起来唯一实际使用 this 的地方是以下看起来很吓人的函数:
仅评论它们并恢复为默认值new
和delete
行为是否安全?或者这些是否在做一些超出使代码更节省内存的事情,在这种情况下我需要一个实际的修复?
基本上,是否有对此代码的修复,以便它可以在最新的 GCC 版本下工作?
solaris - 如何获得适用于 Solaris 11 的 Ada GNAT gcc 7.3?
我们有一个 gcc 7.3 的 Solaris 11 系统,我们需要安装 Ada 包。在 Linux gcc 7 上,Ada/GNAT 是 gcc 安装的一部分:
我访问过 AdaCore 貌似 Solaris (SPARC) 已经不在列表中了。我需要使用 Ada95,并且无论如何我们都希望在 Linux 和 Solaris 上使用相同的编译器。
只安装了各种 C++ 命令和 Fortran。
像 gcc7ada 这样的变体,没有找到要安装的东西。
如果必须的话,我们可以重建 GCC 7 的 Ada 组件,但是我还没有找到一个明确的 cood-book 风格“How To ...”(目前)。
希望您能按优先顺序向我指出这些项目,以帮助我们重回正轨。
- 用于 gcc7/Solaris 11 spark 的 Solaris 11 gcc-ada 包,以及包存储库。
- 我可以检索 GCC Ada 工具的“替代”包存储库。
- 预构建 GCC 7 Ada 模块,我们可以将其复制到正确的位置。
- 用于 Solaris 的现成构建 Ada/GNAT 项目以及如何下载和开始构建。
- 在 Solaris(或 Unix)上使用 gcc 7 下载和构建 gcc-ada 的说明。
从过去几天开始,在 Gnu Compiler Collection、Oracle、包管理器搜索、google 等上进行搜索......这些天似乎在 Solaris 上几乎没有对 CGG Ada 的支持。
我对该列表之外的其他解决方案非常感兴趣。例如,有没有人从 Linux 交叉编译到 Solaris?无论如何,这对 Solaris 机器上的 GDB 是否有效?
期待您的建议。
c++ - gcc-7:错误:无法识别的命令行选项“-m64”
我正在尝试在 Jetson Nano 上编译 C 代码,但在编译过程中出现此错误。我尝试删除任何出现的“m -64”,但它似乎是自动添加的。这是失败的cmd: /usr/bin/gcc-7 -Wall -Wextra -Wconversion -pedantic -Wshadow -m64 -Wfatal-errors -O0 -g -o CMakeFiles/dir/testCCompiler.c.o -c /home/user/dir/CMakeFiles/CMakeTmp/testCCompiler.c
gcc-7:错误:无法识别的命令行选项'-m64'</p>