问题标签 [g++]

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

c++ - 如何让 g++ 忽略某些代码的 -mregparm?

一些背景:

作为个人项目,我一直在用 C++ 开发内核。事情进展顺利,事实上我对内核领域的大部分可用 c++ 都有很好的支持(我已经实现了几乎整个 libc 和 libstdc++)。

RTTI 和异常支持是比较困难和特定于编译器的事情之一。现在我完全禁用异常,但 RTTI 是我想要的,因为类似的东西dynamic_cast可能非常有用。为了完成这项工作,我有一个 std::type_info 的基本实现,它与 g++ 的期望相匹配,然后我链接到 g++libsupc++.alibgcc_eh.a. 这很好用。RTTI 像冠军一样工作!

问题:

我一直在玩弄一些优化选项,并希望有一天将 -mregparm 作为编译时选项。显然这是一个内核并且必须与汇编代码交互,有些函数在堆栈上没有参数时不能很好地发挥作用。为了解决这个问题,我使用以下宏:

再一次,这工作得很好。问题是当你做一个dynamic_cast. 编译发出对一些隐式定义的内部函数(在前面提到的支持库中定义)的调用,并且这样做尊重 -mregparm 标志。当然,由于我链接到系统的支持库,它们可能有也可能没有(在我的情况下它们没有)具有兼容的调用约定......导致漂亮的内核恐慌。由于这些函数是隐式的(我的任何文件中都没有原型)并且它们的名称很长,名称混乱,因此(几乎)不可能将我的 asmlinkage 属性添加到它们。

想到了 3 种可能的解决方案。

  1. 忘记一起支持-mregparm。
  2. 使用与内核相同的标志重新编译这 2 个支持库。这可能很烦人并且有点不切实际(我不知道它们是否可以与 gcc 构建完全隔离,并且工具链升级可能非常痛苦),但应该可以。
  3. 以某种方式使编译器在调用特定 .a/.o 文件中的代码时忽略 -mregparm。

选项3可能吗?我的直觉是不,但我想我会问,因为这里有一些 g++ 大师:-)。

0 投票
4 回答
2093 浏览

c++ - 调用临时对象的方法是否安全?

我有一个函数将返回一个 char*。由于我必须连接一些字符串,所以我写了以下行:

我知道我可以避免命名我要使用的字符串的问题。我只是想借此机会提出一个更普遍的问题:调用临时变量的方法是否安全?是否符合标准?

0 投票
4 回答
970 浏览

c++ - 构造函数定义和声明不匹配

我有以下 C++ 代码,其中声明中构造函数的参数与构造函数的定义具有不同的常量。

我能够使用 g++ 在没有警告的情况下编译它,这段代码应该编译还是至少给出一些警告?事实证明,64 位 solaris 上的内置 C++ 编译器给了我一个链接器错误,这就是我注意到存在问题的原因。

在这种情况下,匹配参数的规则是什么?这取决于编译器吗?

0 投票
3 回答
11485 浏览

c++ - 如何摆脱 g++ hash_map 弃用警告?

当我编译我正在编写的使用 hash_map 的 c++ 应用程序时,我在 g++ 4.3.2 上收到此警告:

您正在使用已弃用的标头。要消除此警告,请使用 ANSI 标准头文件或使用 hte -Wno-deprecated 编译器标志。

什么包括取代这个?我在谷歌上搜索了一段时间,除了有类似问题的人之外找不到任何东西,但没有解决方案。

0 投票
6 回答
2462 浏览

c++ - 如何从 Windows 交叉编译 PS3 上的 Cell Linux?

如何实现交叉编译设置以允许使用 cygwin 工具链在 Windows PC 上编译 Cell Linux 程序?cygwin 工具提供了一个用于构建交叉编译器的 GNU 编译器,以及用于构建过程的相关工具,例如 rpm、cpio、make、flex、bison 等。

我有一定的信心这是可能的,但不知道有谁真正做到了这一点。它已经为x86 Linux完成了,但我希望使用 Windows,而不需要使用运行整个第二个操作系统的虚拟机和开销。

Cell Linux 工具链是一个修补过的 GNU 工具链,带有用于 PPU 和 SPU 处理器的 C 和 C++ 编译器,以及相关的 binutils。可以在此处找到用于 Cell Linux 的 Cell Linux SDK 的源代码。此处的源 RPMS具有构建脚本,可与 Linux 上的 rpmbuild 工具一起使用。

具体问题是:如何使用 Cygwin 在 Windows 上构建一组用于 PPU 和 SPU 处理器的 Cell Linux GNU 编译器。

0 投票
13 回答
506 浏览

c++ - 包含和/或链接二进制文件未使用的内容有什么负面影响?

假设我有一个正在构建的二进制文件,并且我包含了一堆从未实际使用过的文件,然后是否链接到这些包含文件描述的库?(同样,这些库从未使用过)

除了增加编译时间之外,这样做的负面后果是什么?

0 投票
2 回答
1739 浏览

c++ - 为什么这在 C 中编译而不是 C++(sigaction)?

尝试使用 g++ 编译以下代码时出现以下错误。当我使用 gcc 编译它时,它工作正常(除了一些警告)。任何帮助表示赞赏。


0 投票
3 回答
15430 浏览

c++ - 使用 g++ 编译器生成目标文件到单独的目录 - C++

我使用以下代码将 cpp 文件编译为目标文件。

上面的代码在 main.cpp 所在的同一目录中生成 .o 文件。

  1. 假设我有一个名为 obj 的文件夹,需要在那里生成目标文件,我该怎么写呢?
  2. 如何查看 g++ 支持的编译器开关及其用法?

任何帮助都会很棒

0 投票
7 回答
41124 浏览

ubuntu - 如何在 Ubuntu 上安装 g++ 4.4?

有一个 Debian g++-4.4软件包,但它不是 Ubuntu。网络上有太多被系统破坏的可怕故事。

如何在 Ubuntu 上安装 g++ 4.4?

0 投票
3 回答
11972 浏览

c++ - typeid() 在 g++ 中返回额外的字符

上面的代码使用 g++ 在我的 ubuntu 机器上打印P3foo 。我不明白为什么要打印P3foo而不是foo。如果我更改代码

它打印3foo

有什么想法吗?