基于 Pro*C 的批处理,内存不足



当尝试编译基于 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

这为我解决了问题

相关内容

  • 没有找到相关文章

最新更新