3

我正在尝试使用以下代码初始化 Metal C 环境,但在 memset 行上出现以下错误。ERROR CCN3275 IMIJWS0.METAL.SAMPLIB(MEM):6 遇到意外的文本')'。错误 CCN3045 IMIJWS0.METAL.SAMPLIB(MEM):6 未声明的标识符 ___MEMSET。ERROR CCN3277 IMIJWS0.METAL.SAMPLIB(MEM):6 语法错误:可能缺少 ')' 或 ','?CCN0793(I) 文件编译失败 //'IMIJWS0.METAL.SAMPLIB(MEM)'。未创建目标文件。下面是我的代码


   #include < string.h>
   #include < stdlib.h>
   #include < metal.h>
   void mymtlfcn(void)  {
   struct __csysenv_s mysysenv;
   memset ( &mysysenv, 0, sizeof ( mysysenv ) );
   mysysenv.__cseversion = __CSE_VERSION_1;
   mysysenv.__csesubpool = 129;
   mysysenv.__cseheap31initsize = 131072;
   mysysenv.__cseheap31incrsize = 8192;
   mysysenv.__cseheap64initsize = 20;
   mysysenv.__cseheap64incrsize = 1;

4

4 回答 4

3

问题在于搜索顺序。虽然我在 JCL 中使用 with 进行了 search(/usr/metal/include),但我没有使用 nosearch 选项继续它,所以 string.h 是从标准系统库而不是 Metal C 中包含的版本中获取的。我已将我的 optfile 数据集粘贴到下面的 CPARM 以供参考。

//选项 DD *
 所以
 列表
 长
 NOXREF
 CSECT
 金属
 LP64
 鼻子搜索
 搜索(/usr/include/metal/)
于 2009-06-09T16:14:11.537 回答
1

所以,我不知道。但一些建议:

  1. 您可以尝试在此示例中复制/粘贴此代码,以确保它“按预期”工作

  2. 也许尝试在这里定义一些宏?(当我在 zOS 上进行 C 编程时,我必须包含一些奇怪的宏才能使东西正常工作。对此我没有合理的技术解释。)

  3. 您可以尝试使用“=3.14”(来自 ispf)搜索 memset()。查看是否有任何其他模块使用该函数,然后检查它们包含的标头(或它们定义的宏 - 在 C 文件或 H 文件中) ) 使其工作。

  4. 另一个想法:在 memset() 之前,尝试将 printf() 放入。如果在同一行出现语法错误(仅适用于 printf,而不是 memset),那么您可以查看问题是否在第 6 行之前 - 比如一个错位的括号。

  5. 最后,如果我没记错的话,我必须编译我的各个模块,然后手动链接它们(除非我写了一个 JCL 来为我做这件事。)所以你可能需要链接一次才能链接到你的其他模块,然后链接再次反对 C 库。不是迂腐,而是:你相当肯定你正在做所有的链接传递?

我意识到要尝试的方法很多,您可能已经阅读了手册,但也许有一些有用的东西可以尝试?

此外,您可能已经知道这一点,但这个站点(用于查找错误代码)非常有用。(连同上面的链接,用于全文搜索手册)

编辑:此页面还讨论了“内置功能” - 您可以尝试(如页面底部所述)“#undef memcpy”来使用非内置版本?

于 2009-06-03T23:55:23.847 回答
1

你能告诉我们你的编译器参数吗?您需要确保除了金属 C 头文件之外,您没有拉入标准 C 头文件。这是一个例子:

xlc -c -Wc,metal,longname,nosearch,'list(./)'  -I. -I /usr/include/metal -I "//'SYS1.SIEAHDRV'" -S -qlanglvl=extended foo.c
as -mrent -mgoff -a=foo.list -o foo.o foo.s
ld -bac=1 -brent -S "//'SYS1.CSSLIB'" -o foo foo.o
于 2009-06-04T14:09:43.550 回答
0

您是否缺少该函数的右大括号“}”?任何缺少的分号行终止符怎么样?当缺少大括号/分号时,z/OS C 编译器有时会抛出一些奇怪/误导性的消息。我没有尝试过,但我假设 Metal 也可以。

于 2009-06-09T05:00:56.130 回答