当尝试编译基于 Pro*C 的批处理文件时,进程 "proc" 卡在 1 个 CPU 内核的 100% 上,内存开始增长到系统需要 OOM 终止进程的程度(机器有 16GB 内存,进程增长到 9GB)。
以前有人见过这种行为吗?
作为附加信息:
-mk是主包
的分期付款中的那个-.pc文件是原始文件(我尝试编译几个,例如dtesys.pc)
-库已正确编译
-环境变量设置
正确
是的,它是 limits.h,因为它在第 123 行递归包含自身:
/* Get the compiler's limits.h, which defines almost all the ISO constants.
We put this #include_next outside the double inclusion check because
it should be possible to include this file more than once and still get
the definitions from gcc's header. */
#if defined __GNUC__ && !defined _GCC_LIMITS_H_
/* `_GCC_LIMITS_H_' is what GCC's file defines. */
# include_next <limits.h>
#endif
因此,解决方案是将 parse=none 选项传递给 Pro*C 预编译器:
proc parse=none iname=filename.pc oname=filename.c
或者,第二种选择:您可以先使用 c 预编译器预编译源代码以获取 pc 文件:
cpp -P -E yourfile.someextension -o yourfile.pc
然后你会得到没有递归的limit.h解析。
-P 选项是必需的,因为 Pro*C 是可能与行标记混淆的程序。
-E 选项是必需的,因为 Pro*C 是可能与非传统输出混淆的程序。
另一种选择是在 proc 阶段排除有问题的头文件,并将其包含在编译阶段。
执行此操作的方法是在 proc 命令中添加一个标志define=IN_PROC
,并在 pc 文件中将有问题的标头包装为:
#if !defined(IN_PROC)
# include <limits.h>
#endif
这为我解决了问题