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

4zcjmb1e  于 2023-03-17  发布在  其他
关注(0)|答案(2)|浏览(122)

尝试编译基于Pro*C的批处理文件时,进程“proc”停留在1个CPU核心的100%,内存开始增长,达到系统需要OOM终止进程的程度(计算机有16 GB内存,进程增长到9 GB)。
以前有人见过这种行为吗?
作为附加信息:

  • mk是安装主软件包时的mk
  • .pc文件是原始文件(我尝试编译了几个,如dtesys.pc)
  • 正确编译库
  • 环境变量设置正确
vhipe2zx

vhipe2zx1#

是的,它是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

然后,您将获得limits. h解析,而无需递归。
需要-P选项,因为ProC程序可能与线标记混淆。
需要-E选项,因为Pro
C是一个容易与非传统输出混淆的程序。

kpbwa7wx

kpbwa7wx2#

另一种选择是在proc阶段排除有问题的头文件,并在编译阶段包含它。
方法是向proc命令添加一个标志define=IN_PROC,并在pc文件中用以下内容 Package 有问题的头:

#if !defined(IN_PROC)
#  include <limits.h>
#endif

这为我解决了问题

相关问题