尝试使用反弹时出现 SIGKILL 错误和“<command line>0:1 宏名称必须是标识符”错误

SIGKILL error and "<command line>0:1 macro names must be identifiers" error in trying to use rebound

我一直在尝试让 rebound n-body 程序在我的 PC 上运行,这需要一些 hoop-jumping,而且自然地它没有成功。我 认为 我已经让 freeglut 正确安装了,但是当我尝试在任何示例上使用 make 命令时仍然出现此错误。这是我不断得到的完整输出:

make[1]: Entering directory '/c/rebound-master/src
# Remove old object files
rm -f *.o`
# Compile all source files
cc -O3 -std=c99 -Wpointer-arith -Wno-unknown-pragmas -DOPENGL -D.C -D.C -D.C -D.C main.c -c
"<command line>0:1: error: macro names must be identifiers"
"<command line>0:1: error: macro names must be identifiers"
"<command line>0:1: error: macro names must be identifiers"
"<command line>0:1: error: macro names must be identifiers"
main.c: in function 'main':
main.c:248.9: error: 'SIGKILL' undeclared (first use in this function)
signal(SIGKILL, interruptHandler);
main.c:248.9: note: each undeclared modifier is reported only once for each file it appears in
make[1]: ***[all] Error 1
make[1]: Leaving directory '/c/rebound-master/src'
make: ***[all] Error 2

我看过关于#ifdef 的内容并在它们后面加上下划线或数字来定义,但我在示例文件夹或 src 文件夹的 makefile 中没有发现这样的东西......我没有触及反弹自从获得文件以来根本没有文件,所以我觉得问题是 freeglut 安装或 MinGW 本身 - 有什么想法吗?谢谢

编辑:我仔细查看了 MakeFile,并将问题定位到一个部分:

# Compile all source files
$(CC) $(OPT) $(PREDEF) main.c -c
$(CC) $(OPT) $(PREDEF) problem.c -c
$(CC) $(OPT) $(PREDEF) tree.c -c
$(CC) $(OPT) $(PREDEF) particle.c -c
$(CC) $(OPT) $(PREDEF) gravity.c -c
$(CC) $(OPT) $(PREDEF) integrator.c -c
$(CC) $(OPT) $(PREDEF) boundaries.c -c
$(CC) $(OPT) $(PREDEF) input.c -c
$(CC) $(OPT) $(PREDEF) output.c -c
$(CC) $(OPT) $(PREDEF) collisions.c -c
$(CC) $(OPT) $(PREDEF) collision_resolve.c -c
$(CC) $(OPT) $(PREDEF) communication_mpi.c -c
$(CC) $(OPT) $(PREDEF) zpr.c -c
$(CC) $(OPT) $(PREDEF) display.c -c
$(CC) $(OPT) $(PREDEF) tools.c -c
$(CC) *.o -o nbody $(LIB)

从第一行开始,它很好地走到了尽头,但是在那之间并继续前进到下一行(以 problem.c 作为目标的行),它中断了 - 大概是在它尝试时编译它。或者,更准确地说,当它试图开始编译它时。在它有机会之前,命令行似乎发生了一些破坏它的事情。如果我从 main.c -c 行中删除 $(PREDEF) ,它将毫无错误地通过它,然后在下次尝试处理以该 $(PREDEF) 代码开头的文件时遇到相同的错误.如果我删除所有 PREDEF 代码,它似乎开始正确编译,但那里会出现更多错误,这可能是这个的直接结果,所以我想弄清楚为什么它不喜欢 $(PREDEF)。 .. 我确定它在那里是有原因的。

我已经解决了 - 差不多。我永远无法让它在 MinGW 上运行,但是在安装了 cygwin 并安装了必要的软件包之后(即使我发誓我也可以在 MinGW 上这样做),我取得了进展并且它不再给我这个错误。虽然它确实给我带来了 freeglut 的麻烦 - 结果我实际上并没有设法在 MinGW 中解决这个问题,所以我在那里做了一些挖掘并发现我需要使用 Cygwin 的 Xterminal 而不仅仅是标准的,然后它找到了所有OpenGL 文件就好了。

长话短说,如果您 运行 遇到这个问题并且在源代码中找不到任何内容,请尝试仔细检查您安装的库 - 我想我还不够彻底。