问题标签 [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 回答
4880 浏览

gcc - GCC 4.5 vs 4.4 与依赖项链接

尝试在 GCC 4.4 和 GCC 4.5 上执行相同操作时,我观察到了差异。因为我正在使用的代码是专有的,所以我无法提供它,但我发现这个简单的测试用例也发生了类似的失败。

我基本上想做的是让一个共享库(libb)依赖于另一个共享库(liba)。加载 libb 时,我假设也应该加载 liba - 即使 libb 不一定使用 liba 中的符号。

我观察到的是,当我使用 GCC 4.4 编译时,我观察到 liba 已加载,但如果我使用 GCC 4.5 编译,则未加载 libb。

我有一个包含两个文件 ac 和 bc 的小测试用例。文件内容:

这是我使用不同版本的 GCC 的输出

谁能解释发生了什么?另一个额外的信息是 libb.so 上的 ldd 确实在 GCC 4.4 上显示 liba.so,但在 GCC 4.5 上不显示。

编辑

我将 test.sh 更改为以下内容:

这给出了 GCC 4.5 的以下输出:

0 投票
2 回答
5879 浏览

c++ - why does it cause termination if I try to throw something inside a catch block in C++

I have the following C++ code and it gives me a surprise. The problem is that if I throw something except re-throw inside the catch block, the program will be terminated by calling abort and give the error message in GCC4, "terminate called after throwing an instance of 'int'". If I just use "throw;" to re-throw inside the catch block, everything will be fine.

0 投票
3 回答
2744 浏览

c - 识别/防止静态缓冲区溢出的工具和方法

是否有任何工具或方法可以识别静态定义数组中的缓冲区溢出(即,char[1234]而不是malloc(1234))?

我昨天大部分时间都在追踪崩溃和奇怪的行为,最终结果证明是由以下行引起的:

该索引显然导致超出数组范围的写入。这会导致指针变量的破坏,从而导致该指针稍后出现意外行为。

可以帮助缓解此类问题的三件事是:

  1. 代码审查

    这还没有完成,但我正在努力。

  2. valgrind

    我在开发过程中经常使用 valgrind 来检测内存问题,但它不处理静态数组。在上面的例子中,它只向我展示了诸如free()被破坏的指针无效之类的症状。

  3. -fstack-protector-all

    在过去,我曾经-fstack-protector-all检测过像上面这样的溢出,但出于某种奇怪的原因,它在这种情况下没有标记任何东西。

那么任何人都可以就我如何识别这种超支提供任何想法吗?通过改进上述列表或全新的东西。

编辑:到目前为止,一些答案提到了相当昂贵的商业产品。在这个阶段,我认为我无法说服购买这种工具的权力,所以我想将工具限制为便宜/免费。是的,你得到你所支付的,但有一些改进总比没有好。

0 投票
3 回答
200 浏览

c++ - gcc4 模板错误或更可能的 id10t 错误

以下代码在 Visual Studio 下编译得很好,但 gcc 4.6.2 或 4.7 都无法处理它。它似乎是有效的,但 gcc 似乎无法解决 const 和非 const 参数之间的区别。这可能是编译器错误吗?

编译器调用:

0 投票
1 回答
838 浏览

gcc - 使用 cloog 和 ppl 安装 gcc 4.6.2

我想用 clog 和 ppl 安装 gcc 4.6.2。我的系统中安装了这两个库。当我尝试做时./configure --enable-languages=c,c++ --with-ppl=/usr/lib --with-cloog=/usr/lib,我得到一个错误 Cannot find the directories "/usr/lib/lib" or "/usr/lib/include"所以,我尝试了./configure --enable-languages=c,c++ --with-ppl --with-cloog。在这种情况下,我得到Unable to find a usable ppl. 有人可以帮我吗?

0 投票
2 回答
925 浏览

gcc - GCC 4.6.2 安装中的 clog 和 ppl 错误 (graphite-ppl.c)

我正在尝试在 64 位 ubuntu 10.10 中使用 ppl 和 cloog 安装 gcc 4.6.2。我在做时收到以下错误。

有人可以帮我解决这个问题吗?

0 投票
4 回答
1984 浏览

linux - gcc中的大指针

我想在 gcc 中定义一个不依赖于平台的大指针(64 位或 128 位)。我认为 MSDN 中有类似 __ptr128 或 __ptr64 的东西。

可能吗?

当您在需要 8 字节指针参数的 64 位操作系统中使用内核函数并且您有一个使用 32 位地址的 32 位应用程序并且您想要使用此内核函数时,它会很有用。

0 投票
2 回答
980 浏览

c++ - 基类未捕获 C++ 派生类异常

在我希望它们被捕获的情况下,异常不会被捕获。该代码位于 1 个 cpp 文件中的 1 个函数中,该文件由 GCC 4.2 编译为静态库,然后链接到 Cocoa 应用程序中。有问题的代码是

我可以将代码修改为

代码的第二个版本只解决了 runtime_error 异常的问题,而不解决可能从 std::exception 派生的其他异常类的问题。知道有什么问题吗?请注意,代码的第一个版本适用于 Visual Studio。

谢谢,

巴里

0 投票
1 回答
690 浏览

c++ - Python C API 代码的 gcc 错误 - “ISO C++ 禁止在指向函数的指针和指向对象的指针之间进行转换”

以下代码片段什么都不做,但说明了问题。它是从一些使用 Numpy C API 的 Boost Python 代码中提取的。这是使用从 Debian 不稳定到挤压的 gcc 4.7 快照的后向端口测试的。

我是这样编译的。

问题是代码-pedanticPyArray_ScalarAsCtype。没有-pedantic以下编译没有错误

注意:我添加了=0以抑制未初始化的警告。就像我说的,代码没有做任何事情。

我想抑制或删除警告并保留-pedantic标志。从我读到的内容来看,这里没有这样的错误,但这属于标准的一些有争议的部分。我真的不明白这个问题,或者它与这行代码的关系。新的 gcc 诊断允许有选择地抑制一段代码中的警告,但它们要求您知道触发警告的特定标志,我不知道。没有-Werror旗帜我得到

0 投票
3 回答
488 浏览

header-files - 即使在安装 cpmh 库之后,对 cmph 函数的未定义引用

我在 ubuntu 上使用 gcc 4.4.3。我使用命令安装了 cmph 库工具 0.9-1

sudo apt-get install libcmph-tools

现在,当我尝试编译示例程序 vector_adapter_ex1.c 时,gcc 能够在其包含文件中检测到 cmph.h 库,但显示多个错误,例如

vector_adapter_ex1.c:(.text+0x93): 未定义对cmph_io_vector_adapter' vector_adapter_ex1.c:(.text+0xa3): undefined reference tocmph_config_new' 的引用 vector_adapter_ex1.c:(.text+0xbb): 未定义对cmph_config_set_algo' vector_adapter_ex1.c:(.text+0xcf): undefined reference tocmph_config_set_mphf_fd' 的引用

尽管如此,这些都是在 cmph 库的源代码中定义的。

谁能告诉可能发生的错误或建议另一种方法来构建最小的完美哈希函数。