问题标签 [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.
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 不支持这种类型的大初始化?此外,在编译时是否有针对已知值进行如此大的初始化的设计模式?
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 中遇到错误。以下是我不明白为什么的错误?代码是,
提前致谢
错误是
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)。我只是推荐了这些库,因为它们似乎是完成上述所有工作的最有希望的。
谢谢!
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专家在这里提供一些见解,将会有很大帮助。
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。我不知道,因为我对这一切都很陌生。
c++ - 如何迭代没有开始/结束的容器?
(C++98,gcc4.4.7)假设我有一个连接数据库的容器,它自身不提供迭代器,而只提供索引 getter 和 size(),例如:
我希望能够在基于范围的算法中使用它。这听起来像是一个普遍的问题。Boost 是否为此提供了解决方案?
我对 Boost.Iterator 和 Boost.Range 进行了一些研究,但没有成功。我什至不确定我的谷歌查询应该如何制定以找到任何有用的东西。
我想也许有一个图书馆,它允许类似的东西:
我知道我可以自己从头开始编写它,但我真的在努力不重新发明轮子。
任何基于提升的想法?
c++ - #pragma pack 的奇怪行为
我在使用时遇到了一个奇怪的问题#pragma pack
。
我有以下结构:
st_a
: 挤满了#pragma pack(1)
。大小 = 1 个字节。包含位域。st_b
: 挤满了#pragma pack(2)
。大小 = 14 字节。st_c
: 挤满了#pragma pack(2)
。大小 = 16 字节。包含st_a
和st_b
st_d
: 挤满了#pragma pack(2)
。大小 = 16 字节。(的成员) 的包含st_a
和内容st_b
st_b
因此,由于st_a
is 有 1 个字节打包在 下#pragma pack(1)
,并且由于它在里面st_c
打包在 下#pragma pack(2)
,因此应该有一个额外的填充字节st_c
紧随其后st_a
,并且该额外字节后面应该是st_b
偶数长度的字符缓冲区的内容(10 )。
但是,当我把st_b
out 的内容直接放入st_a
. 填充出现在字符缓冲区之后,而不是之前(见下面的输出)。
有人可以解释一下,为什么会发生这种奇怪的行为?
代码:
输出:
注意:我使用的是 GCC 版本 4.4.x。
关于输出的一些说明:
在第一行,5b
是引入的填充字节,4
它是 1 个字节st_a
,41
它是缓冲区的第一个字符st_b
。
在第二行中,0
是引入的填充字节,4a
它是缓冲区的最后一个字符,是字符缓冲区a
后面的整数st_d
。
第三行打印所有结构的大小。
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 发布时不存在。
有人可以提出解决方案吗?
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 给出错误: