【发布时间】:2017-10-21 05:10:52
【问题描述】:
我正在尝试在 Linux 机器上运行并行代码(数值模拟)。我已经在我的笔记本电脑(OSX)上测试了代码配置,一切正常。当我运送到更大的(Linux)机器时,它会在第一个时间步出现段错误。
我没有编写代码,也不想调试它。我希望可以使用不同的编译器或标志来解决问题。
在我的笔记本电脑 (OSX) 上,我的代码使用默认编译器运行。
cc --version
Apple LLVM version 8.1.0 (clang-802.0.42)
Target: x86_64-apple-darwin16.5.0
在我工作的 Linux 机器上,我正在使用
cc --version
cc (Ubuntu 4.9.4-2ubuntu1~14.04.1) 4.9.4
我在 Linux 机器上尝试了 4.9.4 和 4.8.4,并且都给出了相同的段错误。
我的Makefile 设置了以下指令:
CFLAGS = -O3
LDFLAGS = -I`pwd` -I$(SRCDIR) -I/usr/bin/include -I/usr/include/mpi
LIBFLAGS = -lm -lnetcdf -lmpi -L/usr/bin/lib
我知道这是在黑暗中拍摄,但如果有人对更改有建议,我可以尝试在 linux 机器上运行它,我将不胜感激。万一你还不明白,我只是一个普通的科学家,而不是计算机科学家,所以这对我来说大部分都是黑魔法。
谢谢。
【问题讨论】:
-
希望更改编译器标志会有所帮助并不是解决此类问题的众所周知的策略。我建议您尝试将调试标志添加到您的 Makefile 并花 30 分钟学习调试器。
-
您将不得不调试问题。您可能在代码中有未定义的行为,并且不同的系统反应不同,两者都是正确的,因为所需的行为是未定义的。您使用未初始化变量的可能性不大。
-
“我没有编写代码,也不想调试它。”抱歉,这是你唯一的希望。
标签: c linux macos segmentation-fault