问题标签 [gcc4.7]

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 回答
220 浏览

c++ - 将方法作为回调函数提供(gcc 4.7.1)

我试图将一个看似简单的回调方法指针设置为变量并得到以下错误:

CSerialSniffer.cpp|11|错误:无法从类型 'Nexus::TReceiveCallback (CSerialSniffer::)(Nexus::CData*, Nexus::IMetaData*)'}' 转换 'CSerialSniffer::AsyncRecieverReceived'| 键入'Nexus::typeAsyncReceiverCallback {aka Nexus::TReceiveCallback ( )(Nexus:: CData , Nexus::IMetaData*)}'|

这是 set 语句:

我定义了以下内容:

我已经在这几个小时了,有什么想法吗?

回应答案: 我在这里有相同的回调机制:

它编译得很好。两者有什么区别?

0 投票
2 回答
719 浏览

c++ - 使用 MinGW 和 GCC 4.7.0 的 boost 1.49/1.50/1.51 ASIO 中的转换错误

当简单地包含头文件时,我从 boost::asio 中得到一些奇怪的错误asio.hpp,然后包含其他头文件,直到win_static_mutex.ipp它在其中生成转换错误。

我将 MinGW 与带有 -std=gnu++11 编译器标志的 GCC 4.7 一起使用(请参阅此处为什么是 gnu++11 而不是 c++11)。该错误发生在 boost 1.49、1.50 和 1.51(当前)中。

完整的错误如下:

正如我在开头所说的,我在代码中唯一要做的就是包含asio.hpp标题:

boost 文件中的第43-53行win_static_mutex.ipp是(我已经标记了第51行):

现在是否有一些我必须定义的定义或任何其他编译器标志,或者是否需要直接在 boost 中更改某些内容,或者是否需要更改 MinGW 的某些内容?

0 投票
0 回答
227 浏览

android - Android r8b c++ 共享库问题

这是一个奇怪的设置。我用 GCC 4.7 编译了一个自定义 NDK(用于 Debian armhf chroot 主机)。在测试中,它可以完美地在 Android 上编译和运行常规的 c 和 c++ 二进制文件。尝试使用 C++ 编译测试共享库时:

我收到许多链接器错误_staticinitialization_destruction并且_dso_handle未被引用。

我在目录下的 lib 文件夹中都有libstdc++.a并且可用。到底是怎么回事?几乎没有任何关于 Android C++ 独立编译的信息。libstdc++.soarm-linux-androideabi

编辑 GNU STL 的 iostream 部分似乎未定义 __dso_handle。我从 2005 年的 Linux 帖子中找到了答案。似乎在 2012 年仍然是一个问题:O 大声笑。

0 投票
0 回答
66 浏览

c++ - 移动库和编译器 - 生成的 .a 文件大 10 倍。如何找到根本原因?

我从事的一个项目依赖于另一个非常大的内部图书馆。

我的项目的 CMake 文件是基于库 CMake 文件生成的——它指定了编译器、编译器开关等。旧库将编译器指定为 gcc 4.3.2,而新库将编译器指定为 gcc 4.7.0

当我们迁移到新的库版本时,为我的项目生成的二进制文件增长了大约 10 倍——从 35MB 到 123MB

在 .a 文件上执行 nm,向我展示了相同的 .o 文件为库的两个版本生成了 .a 文件。

但是,在使用新库版本生成的 .a 文件中似乎多了约 30% 的符号(按 wc -l 计算)。

这种二进制大小爆炸的潜在原因是什么?我意识到可能有很多,但是我完全一无所知-任何提示都会有所帮助。

0 投票
1 回答
1145 浏览

c++ - 食人魔构建 gcc 4.7

我正在尝试在 MacOSX 10.6 上使用 gcc 4.7 构建一个名为 Ogre3d v1.8 的库。我尝试从 MacPorts 和 gFortran 网页安装 gcc 版本。两者都有相同的问题,我在互联网上找不到太多关于此的信息。

我的问题是我收到此错误:

换句话说,看起来头文件 wchar.h 丢失了。

我已经能够使用 gcc 4.7 安装构建其他库。所以我猜这是Ogre3d v1.8特有的东西。也许与包含顺序有关。但由于我在寻找其他有此问题的人时遇到问题,我希望这里有人对如何做有一些好的建议。

0 投票
1 回答
687 浏览

c++ - C++11:thread_local 还是 OpenCL 1.2 cl_kernel 对象数组?

我需要在主机中并行运行几个 C++11 线程(GCC 4.7.1)。他们每个人都需要使用一个设备,比如 GPU。根据 OpenCL 1.2 规范(第 357 页):

一种优雅的方法是使用 thread_local cl_kernel 对象,而我能想到的另一种方法是使用这些对象的数组,以便第 i 个线程使用第 i 个对象。由于我之前没有实现这些,我想知道这两者中的任何一个是否很好,或者是否有更好的方法来完成任务。

第三种方法可能是对单个 cl_object 使用互斥体并将其与事件处理程序相关联。然后线程可以等到事件完成。不确定这是否适用于多线程情况......

0 投票
1 回答
1219 浏览

c++ - 在 G++ 4.7 的内联函数中定义时找不到 Lambda

我在头文件中定义了以下函数(它所在的库旨在仅作为头文件):

我正在尝试编译一个包含此文件的小型简单程序,但在链接时我得到了对所有 lambda 的未定义引用。当我说简单时,有一个 CPP 可以编译但无法链接。这是第一个错误:

自从我升级到 GCC 4.7.2 以来,它一直在发生,它曾经在 GCC 4.6.2 中运行良好(Ubuntu 版本以防万一)。虽然我知道解决问题的解决方法,但我想知道我做错了什么或没有正确理解。由于lambas 在内联函数内部,因此它们应该在使用该函数的任何翻译单元中定义。

- 编辑 -

还有一点值得注意:示例程序中没有使用Searchand函数。GetComparer

Search用于Table<Description>(我无法发布完整课程)的成员函数:

但两者都不是从 sample.cpp 文件中调用的。该文件测试其他Table不相关的功能。如果我在成员中评论调用,代码会编译并链接。(我需要成员函数,它是虚拟的,它是上述类型擦除类的一部分Table)。

0 投票
0 回答
1653 浏览

macos - macports gcc4.7 找不到 pthread.h

我已经用 macports 安装了 gcc4.7 并尝试构建 Ogre3d 1.8。

问题是找不到 pthread.h。 我在我的系统(Mac OSX 10.6.8)上的任何地方都找不到 pthread.h,而且我在 macports 上找不到任何用于 pthread 的端口。有谁知道 macports 的 gcc47 编译器是否损坏?我下载了 gcc4.7 编译器的源代码,zip 文件包含一个 pthread.h。

(正如您在日志中看到的那样,pthread.h 包含在系统头文件中,而不是 Ogre3d,所以我不能跳过依赖项)

错误输出:

0 投票
0 回答
492 浏览

c++ - 静态链接glew时链接器退出

将 glew-1.9.0 与我的项目静态链接时遇到问题。

对于可能的最小测试,只需创建一个 OpenGL 上下文(通过 SFML 2)并初始化 glew,链接器在尝试链接静态库时退出且没有错误消息。

我正在使用带有 gcc 4.7.0 的 MinGW。我在 Eclipse for C++ 和 Code::Blocks 中都发现了同样的问题。从 glew 编译的二进制文件以及我编译自己的静态库并链接到它时,都会出现同样的问题。

但是,当我动态链接或在项目中包含 glew.c 源时,程序链接并正确执行。

我正在使用 GLEW_STATIC 定义,链接到 opengl32,并记住包含库和库的路径。如果我只是删除定义并使用它工作的库的 dll 版本。任何人都知道为什么这可能会失败,或者我该如何解决?

0 投票
2 回答
141 浏览

c++ - 类的静态实例在程序退出时无法正确处理资源删除

我今天在做我的项目时偶然发现了这一点。基本上,在我的项目中,我有类似于下面的资源处理。

再次运行 valgrind,在程序退出时,我看到了一些非常神秘的错误。像这样的东西:

通读所有这些,似乎表明析构函数Resource正在释放已经释放的内存区域。

但是我的析构函数绝对正确地处理了事情。为了证明这一点,我将删除代码从析构函数中移到另一个成员函数中。所以,像这样:

然后,我只需在程序退出之前对静态实例调用 clear() 即可。现在,错误不再出现在 valgrind 中!

为了进一步证明这仅与程序死亡时静态实例死亡有关,我删除了静态实例。在我的程序启动时,我只是Resource在堆栈上分配了一个实例,而不是静态实例。main()在此更改之后,问题也消失了。

现在,我想知道为什么会这样?这和操作系统有关系吗?

我的猜测是,操作系统可能会在程序终止时尝试释放所有内容,而我的析构函数恰好在清理过程中启动,而不是之前。

这里有问题的操作系统是 Linux (Ubuntu 12.10)。编译器是 gcc 4.7.2。

谢谢