【问题标题】:g++ 4.6.3 crashes when building code on 64 bit serverg++ 4.6.3 在 64 位服务器上构建代码时崩溃
【发布时间】:2013-04-11 07:13:17
【问题描述】:

我一直在开发一个在 64 位 Ubuntu 12.04 上运行的 C++ 应用程序。我在我的 32 位 12.04 Ubuntu 笔记本电脑上开发代码,然后将其上传到 git 存储库,将其拉到服务器上并本地构建拉取的源代码。

直到最近一切都很好,我没有遇到任何问题,但今天当我尝试在 64 位服务器上编译时 g++ 4.6.3 崩溃了,我得到一个输出告诉我提交崩溃报告(g++ 4.6.3 也是一样我的开发机器上也有版本)。相同的代码不会导致我的开发机器崩溃。

我不是在问它为什么崩溃,但如果可能的话,我想知道是什么问题。 g++ 遇到问题时会产生任何文件日志吗? 据我所知,我的代码没有做任何有争议的事情,我没有创建模板,我只是使用了几个 boost 库、mysql++、openssl 和一些我自己编写的静态库。 我真的需要每天运行这个应用程序,所以我想尽快解决这个问题。我可以想到以下几种方式来处理事情

  1. 尝试找出我的代码的哪些方面导致编译器崩溃并相应地重写我的代码。
  2. 租用另一台服务器。
  3. 升级(或降级)g++ 或在服务器上创建一个额外的g++ 并尝试。我不愿意这样做,因为我了解到在 Ubuntu 上升级 g++ 时可能会破坏系统。
  4. 我使用 Eclipse 在我的开发机器上构建所有内容,并使用 Eclipse 生成的 makefile 在我的服务器上简单地构建代码,我已将其作为 git 项目的一部分 - 我可以编写自己的 makefile,以防其中的某些东西导致崩溃在 64 位服务器上。

我非常欢迎关于如何进行的建议。我不是编译器内部工作原理的专家,这是我第一次遇到这种错误,所以我不太确定下一步该怎么做。

【问题讨论】:

  • 该错误是否表明它崩溃的代码行?你能粘贴那个代码吗?对于此类问题,通常的解决方法是在代码编译之前对代码进行一些细微的更改。 (例如,将一个复杂的语句分成两个简单的语句。)
  • @DavidSchwartz 不幸的是它没有报告这条线。我希望在这里找到一些关于编译器崩溃报告的信息,以便我可以找到导致问题的行。不过感谢您的建议-它给了我一个开始的地方。我可以回滚到我的上一个可编译版本并从那里开始
  • 请在此处尝试平分并报告调查结果。很有趣。

标签: c++ crash g++ ubuntu-12.04


【解决方案1】:

我非常欢迎关于如何进行的建议

崩溃的一个原因可能是硬件问题(磁盘、磁盘控制器、内存或其他问题)。这很难检测到。

另一个原因可能是编译器错误,但可能性很小。

你可以做的是:

  • 检查服务器的硬件(运行你能想到的所有可能的检查)。尝试在不同的机器上多次编译
  • 确保您的系统没有耗尽虚拟内存
  • 升级或更改编译器,看看是否发生

有很多文章解释说 g++ 会因为硬件问题而崩溃:

  • crash during compiling - 您的安装、编译器或内核很可能没有任何问题。它很可能与您的硬件有关。这个“规则”有两个例外。您的虚拟内存可能不足,或者您可能正在安装 Red Hat 5.x、6.x 或 7.x
  • crash during optimization

【讨论】:

  • 如果其他程序运行顺利,编译器错误似乎比硬件问题更可能......也就是说,应该有一个实用程序来测试内存(如果没有 Redis 捆绑了一个) .
  • @MatthieuM。我之前遇到过硬件问题,导致使用 g++ 进行编译时经常中断。就我而言,这是一个有故障的磁盘控制器 - 很难找到。
  • 感谢您的回答。我租用我的服务器空间,所以我无法控制硬件,但至少由于资源不足可能会出现问题。我会深入挖掘。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-10-30
  • 1970-01-01
  • 1970-01-01
  • 2019-02-13
  • 2020-03-17
相关资源
最近更新 更多