问题标签 [gcc4.4]

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.

0 投票
2 回答
435 浏览

c++ - 如何实现用 gcc-4.4 编译的大向量初始化?

我有一个 20k 已知字符串的列表,我在编译时就知道并且永远不会改变。一种不可配置的字典。我不想在运行时从文件中加载它,因为这意味着很多不必要的架构:在某个路径中查找文件、指示路径的配置文件等。

我在 C++ 中提出了这样的解决方案:

在 a.cpp 中:

然后在 values.inl 中,包含 20k 个 push_back 调用的列表,如下所示:

此代码在 Debian 上与 gcc-4.8 一起编译并正常工作,但无法与 gcc-4.4 一起编译,gcc-4.4 永远无法完成编译 a.cpp 文件。

为什么 gcc-4.4 不支持这种类型的大初始化?此外,在编译时是否有针对已知值进行如此大的初始化的设计模式?

0 投票
1 回答
71 浏览

c++ - 源代码错误,从 gcc4.9.2 降级交叉编译器到 gcc4.4.1

我目前正在研究 arm-unknown-linux-gnueabi 并将编译器从 gcc4.9.2 降级到 gcc4.4.1。我使用 crosstool-ng 编译带有 gcc4.4.1 的编译器。如您所知,gcc4.9.2 支持更多的 c++11 功能,然后是 gcc4.4.1。代码在 4.9.2 中编译时没有错误,但在 4.4.1 中遇到错误。以下是我不明白为什么的错误?代码是,

提前致谢

错误是

0 投票
1 回答
422 浏览

c++11 - 使用可变参数馈送 boost::format

我正在尝试编写一个日志函数,它采用可变参数列表并在安全庄园中打印。
vprintf似乎是显而易见的答案,但是当格式字符串期望的参数比提供的参数多时,我似乎找不到一种安全的方法来处理。

此外,如果我可以重新排列参数的打印顺序,那就太好了。
这第二个要求导致我boost::format,这似乎正是我想要的,除了它不接受va_list输入。

我做了一些广泛的搜索,我能得到的最接近的是这个解决方案:
boost::format with variadic template arguments

不幸的是,我仅限于特定的 gcc 版本,它似乎不包括std::initializer_list

在我的搜索中,我偶然发现boost::preprocessor它似乎应该能够完成我想要的,但我正在努力实现它。

所以,理想情况下,我正在寻找的是如下工作的东西:

MagicalFunctionCall(args)会将我的参数转换为:例如
1, "Test", 3.4, "OtherString"

1 & "Test" & 3.4 & "OtherString"

我不一定与boost::preprocessor任何东西相关联boost,但在不引入任何额外的第 3 方依赖项的情况下完成此操作将是理想的(我们已经在项目的其他地方使用了 boost)。我只是推荐了这些库,因为它们似乎是完成上述所有工作的最有希望的。

谢谢!

0 投票
0 回答
1330 浏览

c++ - GCC 4.4 中的 OpenSSL 1.1.1a OPENSSL_API_COMPAT 问题

我有一个使用 Openssl 1.1.1a 的 C++ 代码。在 gcc4.4 中执行此 c++ 代码时出现链接错误

相同的 c++ 代码正在使用 windows 构建文件。

它使用来自 openssl 的 evp.h 的 EVP_CIPHER_CTX_init() 和 EVP_CIPHER_CTX_cleanup()。

在 evp.h 中,这些宏定义如下。

在 opensslconf.h 中的某处声明了以下内容

因此,理想情况下 OPENSSL_API_COMPAT 应该初始化为 0,这将定义由 C++ 代码链接的两个函数。

不知何故,这两个函数在 gcc4.4 中构建时没有定义。

我尝试在使用 -DOPENSSL_API_COMPAT=0 构建时将 OPENSSL_API_COMPAT 定义为 0 但仍然没有运气

理想情况下,应该在宏 OPENSSL_API_COMPAT 设置为 0 时定义这些函数。在 c++ 代码或其他库中没有其他地方可以操作此宏。

宏可以更改什么以及在哪里更改?如果任何openssl专家在这里提供一些见解,将会有很大帮助。

0 投票
0 回答
140 浏览

fedora - 我可以在 Fedora 29 上安装 GCC 4.4.4 或降级我的 Fedora 版本吗?

我有一段代码目前正在 Fedora 13 上编译(我在 VM 上)。我使用 Fedora 29 创建了一个新 VM。问题是 F29 具有 GCC v8.1,而 F13 具有 GCC v4.4.4,因此代码未在 F29 上编译。我发现使用 update-alternatives 可以安装多个 GCC 版本。但是,我无法安装 gcc4。有谁知道,怎么做?或者,我应该使用其他 Fedora 版本吗(因为 F13 不允许我安装 Virtual Box 扩展)。

我正在使用 Virtual Box 6。我不知道,因为我对这一切都很陌生。

0 投票
0 回答
88 浏览

c++ - 如何迭代没有开始/结束的容器?

(C++98,gcc4.4.7)假设我有一个连接数据库的容器,它自身不提供迭代器,而只提供索引 getter 和 size(),例如:

我希望能够在基于范围的算法中使用它。这听起来像是一个普遍的问题。Boost 是否为此提供了解决方案?

我对 Boost.Iterator 和 Boost.Range 进行了一些研究,但没有成功。我什至不确定我的谷歌查询应该如何制定以找到任何有用的东西。

我想也许有一个图书馆,它允许类似的东西:

我知道我可以自己从头开始编写它,但我真的在努力不重新发明轮子。

任何基于提升的想法?

0 投票
1 回答
153 浏览

c++ - #pragma pack 的奇怪行为

我在使用时遇到了一个奇怪的问题#pragma pack

我有以下结构:

  1. st_a: 挤满了#pragma pack(1)。大小 = 1 个字节。包含位域。
  2. st_b: 挤满了#pragma pack(2)。大小 = 14 字节。
  3. st_c: 挤满了#pragma pack(2)。大小 = 16 字节。包含st_ast_b
  4. st_d: 挤满了#pragma pack(2)。大小 = 16 字节。(的成员) 的包含st_a和内容st_bst_b

因此,由于st_ais 有 1 个字节打包在 下#pragma pack(1),并且由于它在里面st_c打包在 下#pragma pack(2),因此应该有一个额外的填充字节st_c紧随其后st_a,并且该额外字节后面应该是st_b偶数长度的字符缓冲区的内容(10 )。

但是,当我把st_bout 的内容直接放入st_a. 填充出现在字符缓冲区之后,而不是之前(见下面的输出)。

有人可以解释一下,为什么会发生这种奇怪的行为?

代码:

输出:

注意:我使用的是 GCC 版本 4.4.x。

关于输出的一些说明

在第一行,5b是引入的填充字节,4它是 1 个字节st_a41它是缓冲区的第一个字符st_b

在第二行中,0是引入的填充字节,4a它是缓冲区的最后一个字符,是字符缓冲区a后面的整数st_d

第三行打印所有结构的大小。

0 投票
1 回答
88 浏览

c - 在 GCC 3.2、4.4 和 5.4 的 C89 中启用 long long

我在相当受限的环境中使用 C89。我需要为基于 GCC 4.4 的编译器编写代码,但我的代码还必须通过使用 GCC 3.2 编译的测试。我们的日常开发编译器是 GCC 5.4。就我的钱而言,这听起来很疯狂,但这些都是我收到的牌。

因为我们需要 64 位整数,所以我们采取了放宽 C89 规则的步骤,以便使用long long. 我们的初始代码处理这样的问题:

不幸的是,这不适用于 GCC 4.4,因为在 GCC 4.6 中引入了 push 和 pop 操作,所以我将其更改为:

唉,GCC 3.2 不喜欢它:

看到它是用 编译的-Wunknown-pragmas,我怀疑它#pragma GCC diagnostic在 GCC 3.2 发布时不存在。

有人可以提出解决方案吗?

0 投票
1 回答
73 浏览

c++ - C++98模板类静态成员初始化?

在最初于 2001 年编写的大型 C++ 代码库中,大量使用了 Singleton 类,其定义如下:

现在,使用我必须使用的 GCC 4.7.7,使用默认的 c++98 标准,并在测试文件中使用 INIT_SINGLETON(structX),我得到:

代码最后在 Linux RHEL3 上使用 GCC 3.4.3 编译成功 - 我正在尝试将其移植到 RHEL6 (GCC 4.4.4 / 4.7.7)。

自从我使用 C++98 代码以来已经有一段时间了,虽然我从 @ 1994 开始使用 C++,但今天我似乎无法理解这个问题。

谁能解释一下为什么会发生这个错误以及如何避免它?

应 SM 和 NathanOliver 的要求,这是 /tmp/ts.cpp:

GCC 4.7.7 给出错误: