3

我一直在开发一个在 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 崩溃位服务器。

我真的很欢迎有关如何进行的建议。我不是编译器如何在内部工作的专家,这是我第一次遇到这种错误,所以我不太确定下一步该做什么。

4

1 回答 1

1

我真的很欢迎有关如何进行的建议

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

另一个原因可能是编译器错误,但不太可能。

你可以做的是:

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

有各种文章解释说 g++ 可能由于硬件问题而崩溃:

  • 编译期间崩溃- 您的安装、编译器或内核很可能没有任何问题。它很可能与您的硬件有关。这个“规则”有两个例外。您可能在虚拟内存上运行不足,或者您可能正在安装 Red Hat 5.x、6.x 或 7.x
  • 优化时崩溃
于 2013-04-11T07:27:50.167 回答