问题标签 [gcc4]

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 投票
1 回答
72 浏览

gcc - GCC 问题,在 2 个不同(但相似)的系统上生成不同的输出

我在我的一个项目中使用Brian Gladman 的库进行 EAX 加密。

问题是代码在我的本地开发环境(在 virtualbox 下运行的 Ubuntu)上运行,但相同的代码在运行在 Amazon AWS 云上的系统上不起作用(加密不正确)。

我已经检查了 GCC 版本以及我的本地环境和云端。版本相同:

gcc 版本 4.4.5 (Ubuntu/Linaro 4.4.4-14ubuntu5)

在什么情况下会发生这种情况?有任何想法吗?

0 投票
3 回答
9450 浏览

c++ - 如何设置 gcc 4.3 默认规格文件?

使用 gcc 4.3.2 版时,我看到如何使用以下方法生成规范:

现在切换到与 libgcc 相同的目录:

我有一个可以修改的填充规格文件。但是,一旦完成,我仍然会看到:

我如何告诉 gcc 默认使用该规范文件,而不是强制我在-specs每次编译时传递一个参数?我希望它与我拥有的另一个系统相匹配,我得到以下信息:

如您所见,两个系统之间的主要区别在于现有设置是 32 位的,而我现在尝试在 64 位系统上进行匹配。Linux 的版本在其他方面是相同的,我正在编译相同版本的 gcc。(两个系统 gcc 4.3.2 是第二个 gcc 安装,4.1.2 用于编译 4.3.2)

0 投票
1 回答
1258 浏览

c++ - gcc-3 二进制文件是否与 gcc-4 兼容

我有一个使用 gcc 3.4.3 编译的静态库。我想在现在将使用 gcc-4 编译的代码中使用它。我模糊地读到 gcc-3 和 gcc-4 二进制文件不兼容,并且需要重新编译该库,但只想确认这一点。反正 gcc-3 库不能与 gcc-4 一起使用吗?

0 投票
0 回答
890 浏览

c++ - GCC 4.5,boost 和 throw_error_already_set

使用 Python 2.2.3、Boost 1.46 和这个简单的扩展模块:

如果我构建 Boost,那么这个模块,使用 GCC 3.4.5(XP SP3 上的 Mingw),一切正常:

除了编译器(GCC 4.5.2)没有改变任何东西:

所以我启动 gdb 并中断 abort。在我看来,error_already_set 异常没有被任何人捕获:

有趣的是,在我的实际用例中,该类包含了几个方法;对于其中一些,error_already_set 机制有效;对于其他一些人来说,它没有...... C++ 大师对此有任何暗示吗?

0 投票
2 回答
178 浏览

c++ - 无法为我的 LruCache 类定义模板类型

如果我尝试简单

LruCache 缓存;

我收到以下编译错误:

但是,如果我定义没有模板类型的类。IE

它编译得很好。

0 投票
2 回答
729 浏览

cmake - 使用 CMake 和 GCC 4.1.2 链接到 stdc++

我正在开发一个库,需要确保它与 4.1.2 一起编译(我知道,它没有给我带来任何乐趣)。因此,我在 Fedora 14 机器上下载、编译并安装了 GCC41。

现在在 CMake 中,我只将以下内容更改为变量 CMAKE_CXX_COMPILER=/opt/gcc41/bin/c++41 CMAKE_C_COMPILER=/opt/gcc41/bin/gcc41

它编译得很好,但似乎使用了错误版本的标准库。我得到的错误如下所示:

显然它从 .../include/c++/4.5.1/ 中提取包含,但我看不到它链接到哪个版本的库。

有什么办法可以控制吗?

0 投票
3 回答
2762 浏览

c++ - C-回调函数模板:显式实例化模板

前提

我正在使用提供以下接口的 C 库(来自 C++):

问题

现在,我需要将函数模板注册为回调,这给我带来了问题。考虑以下代码:

这给了我以下链接器错误(在 OS X 上使用 g++ (GCC) 4.5.1,但适用于编译器版本/平台的大多数其他组合):

架构 x86_64 的未定义符号:

我觉得可以理解。

第一个“解决方案”</h2>

这很容易通过显式实例化模板来解决:

不幸的是,这不适用于我的真实代码,因为回调是函数模板中注册的,而且我不知道该函数将针对哪一组模板参数调用,因此我无法为所有他们(我正在编写一个库)。所以我的真实代码看起来有点像这样:

第二个“解决方案”</h2>

通过调用函数隐式实例化函数模板。所以让我们这样做,但要确保调用没有实际执行(该函数有副作用):

似乎有效,即使启用了优化(以便编译器删除死分支)。但我不确定这是否有一天会崩溃。我还发现这是一个非常丑陋的解决方案,需要一个长度的解释性注释,以免某些未来的维护者删除这个明显不必要的代码。

问题

如何实例化我不知道模板参数的模板?这个问题显然是无稽之谈:我不能。——但是有什么偷偷摸摸的方法吗?

除此之外,我的解决方法能保证成功吗?

奖金问题

代码(特别是我将函数指针转换为 的事实void*)也会产生以下警告:

ISO C++ 禁止在指向函数的指针和指向对象的指针之间进行转换

编译时使用-pedantic. 我可以以某种方式摆脱警告,而无需为库编写强类型 C 包装器(在我的情况下这是不可能的)?

在 ideone 上运行代码(添加强制转换以使其编译)

0 投票
4 回答
2625 浏览

c++ - 没有有用且可靠的方法来检测 C/C++ 中的整数溢出?

不,这不是如何检测整数溢出的副本?. 问题是一样的,但问题是不同的。


gcc 编译器可以优化溢出检查(使用 -O2),例如:

gcc 的人认为这不是一个错误。根据 C 标准,溢出是未定义的行为,它允许编译器执行任何操作。显然,任何事情都包括假设溢出永远不会发生。不幸的是,这允许编译器优化溢出检查。

最近的CERT 论文中描述了检查溢出的安全方法。本文建议在添加两个整数之前执行以下操作:

显然,当您想确保结果有效时,您必须在一系列计算中的每个 +、-、*、/ 和其他操作之前执行类似的操作。例如,如果您想确保数组索引没有超出范围。这太麻烦了,几乎没有人这样做。至少我从未见过系统地执行此操作的 C/C++ 程序。

现在,这是一个基本问题:

  • 在访问数组之前检查数组索引很有用,但不可靠。

  • 使用 CERT 方法检查一系列计算中的每个操作是可靠的,但没有用处。

  • 结论:在 C/C++ 中没有检查溢出的有用且可靠的方法!

我拒绝相信这是编写标准时的意图。

我知道有某些命令行选项可以解决问题,但这并不能改变我们对标准或对它的当前解释存在根本问题的事实。

现在我的问题是:当 gcc 允许他们优化溢出检查时,他们对“未定义行为”的解释是否太过分了,或者 C/C++ 标准是否被破坏?

补充说明: 对不起,您可能误解了我的问题。我不是在问如何解决这个问题——这已经在别处得到了回答。我在问一个关于 C 标准的更基本的问题。如果没有有用且可靠的方法来检查溢出,那么语言本身就是可疑的。例如,如果我创建一个带有边界检查的安全数组类,那么我应该是安全的,但如果边界检查可以被优化掉,我就不安全了。

如果标准允许这种情况发生,那么要么标准需​​要修订,要么标准的解释需要修订。

添加注释 2: 这里的人们似乎不愿意讨论“未定义行为”的可疑概念。C99 标准列出了 191 种不同类型的未定义行为(链接)这一事实表明标准草率。

许多程序员欣然接受“未定义的行为”允许做任何事情的声明,包括格式化你的硬盘。我认为标准将整数溢出归入与写入数组边界外相同的危险类别是一个问题。

为什么这两种“未定义行为”不同?因为:

  • 许多程序依赖于整数溢出是良性的,但是当你不知道那里有什么时,很少有程序依赖于写入数组边界之外的内容。

  • 实际上,在数组边界之外写入可能会造成与格式化硬盘一样糟糕的事情(至少在像 DOS 这样的未受保护的操作系统中),并且大多数程序员都知道这是危险的。

  • 当您将整数溢出放入危险的“任何事情发生”类别时,它允许编译器做任何事情,包括谎报它正在做的事情(在溢出检查被优化的情况下)

  • 使用调试器可以发现诸如写入超出数组边界之类的错误,但优化掉溢出检查的错误却不能,因为在调试时优化通常是关闭的。

  • 在整数溢出的情况下,gcc 编译器显然会避免“任何事情发生”的策略。在许多情况下,它会避免优化,例如循环,除非它可以验证溢出是不可能的。出于某种原因,gcc 人员已经认识到,如果他们在这里遵循“一切顺利”的政策,我们将会有太多错误,但他们对优化掉溢出检查的问题有不同的态度。

也许这里不适合讨论这些哲学问题。至少,这里的大多数答案都是离题的。有没有更好的地方来讨论这个?

0 投票
1 回答
2501 浏览

ios - 用于发布版本的 dSYM 文件

资源是否.dSYM包含除 DWARF 信息之外的任何其他信息?我已经创建了一个应用程序的发布版本。现在,如果我dwarfdump在它上面运行,它说可执行文件没有 DWARF 信息(说它是“空的”),这是我所期望的。但是,如果我dsymutil在它上面运行,它会创建非空符号文件。这些是二进制文件,所以我不知道里面有什么。任何人都可以启发我吗?这些文件是否有查看者?

0 投票
6 回答
262314 浏览

git - 如何使用自制软件安装 imagemagick?

我正在尝试在 OSX Lion 上安装 Imagemagick,但有些东西没有按预期工作。

酿造医生 说:

是的,我已经安装并运行了 XCode 4.1。