我一直在开发一个在 64 位 Ubuntu 12.04 上运行的 C++ 应用程序。我在我的 32 位 12.04 Ubuntu 笔记本电脑上开发代码,然后将其上传到 git 存储库,将其拉到服务器上并在本地构建拉取的源代码。
直到最近一切都运行良好,我没有遇到任何问题,但今天当我尝试在 64 位服务器上编译时 g++ 4.6.3 崩溃了,我得到一个输出告诉我提交崩溃报告(g++ 4.6.3 是相同的我的开发机器上也有这个版本)。相同的代码不会导致我的开发机器崩溃。
我不是问它为什么崩溃,但如果可能的话,我想知道问题出在哪里。 g++ 遇到问题时会生成任何文件日志吗? 据我所知,我的代码没有做任何有争议的事情,我没有创建模板,我只是使用了几个 boost 库、mysql++、openssl 和一些我自己编写的静态库。 我真的需要每天运行这个应用程序,所以我想尽快解决这个问题。我可以想到以下几种方法来处理事情
- 尝试找出我的代码的哪个方面导致编译器崩溃并相应地重写我的代码。
- 租用另一台服务器。
- 升级(或降级)g++ 或在服务器上创建一个额外的 g++ 并尝试。我不愿意这样做,因为我了解到在 Ubuntu 上升级 g++ 可能会毁掉你的系统。
- 我使用 Eclipse 在我的开发机器上构建所有内容,并使用 Eclipse 生成的 makefile 在我的服务器上简单地构建代码,我已将其作为 git 项目的一部分 - 我可以编写自己的 makefile 以防其中的某些东西导致崩溃在 64 位服务器上。
我非常欢迎有关如何进行的建议。我不是编译器内部工作方式的专家,这是我第一次遇到这种错误,所以我不太确定下一步该怎么做。
最佳答案
I would really welcome advice on how to proceed
崩溃的一个原因可能是硬件问题(磁盘、磁盘 Controller 、内存或其他问题)。这很难检测到。
另一个原因可能是编译器错误,但可能性很小。
你可以做的是:
- 检查服务器的硬件(运行您能想到的所有可能的检查)。尝试在不同的机器上多次编译
- 确保您的系统没有用完虚拟内存
- 升级或更改编译器,看看是否会发生
有很多文章解释了 g++ 会因为硬件问题而崩溃:
- crash during compiling - 很可能您的安装、编译器或内核没有任何问题。它很可能与您的硬件有关。这个“规则”有两个异常(exception)。您的虚拟内存可能不足,或者您正在安装 Red Hat 5.x、6.x 或 7.x
- crash during optimization
关于c++ - 在 64 位服务器上构建代码时 g++ 4.6.3 崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15942744/