문제

다음 코드로 Metal C 환경을 초기화하려고하지만 Memset 라인에서 다음 오류를 얻으십시오. 오류 CCN3275 IMIJWS0.METAL.SAMPLIB (MEM) : 6 예상치 못한 텍스트 ')'가 발생했습니다. 오류 CCN3045 IMIJWS0.METAL.SAMPLIB (MEM) : 6 명확하지 않은 식별자 ___memset. 오류 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;

도움이 되었습니까?

해결책

문제는 검색 순서와 관련이있었습니다. JCL에서 검색 (/usr/metal/include)을 검색했지만 Nosearch 옵션으로 진행하지 않았으므로 String.h는 Metal C에 포함 된 버전 대신 표준 시스템 라이브러리에서 픽업되었습니다. 나는 옵터 파일 데이터 세트를 붙여 넣었습니다.

//OPTIONS DD *
 SO
 LIST
 LONG
 NOXREF
 CSECT
 METAL
 LP64
 NOSEARCH
 search(/usr/include/metal/)

다른 팁

그래서, 나는 전혀 모른다. 그러나 몇 가지 제안 :

  1. 이 코드를 여기에서 복사/붙여 넣을 수 있습니다. 이 예 '예상대로'작동하는지 확인하기 위해

  2. 아마도 매크로의 일부를 정의해보십시오 여기? (ZOS에서 C 프로그래밍을했을 때, 나는 일을하기 위해 이상한 매크로를 포함시켜야했다. 나는 이것에 대한 합리적인 기술적 설명이 없다.)

  3. "= 3.14"(ISPF에서)를 사용하여 memset ()를 검색하려고 시도 할 수 있습니다. ) 작동하게합니다.

  4. 또 다른 생각 : memset () 이전에 printf ()를 넣으십시오. 같은 줄에 구문 오류가 발생하면 (Memset이 아닌 인쇄물에 대해서만) 문제가 6 행 앞에 있는지 확인할 수 있습니다. 잘못 배치 된 괄호.

  5. 마지막으로 올바르게 기억한다면 개별 모듈을 컴파일 한 다음 수동으로 연결해야했습니다 (JCL을 작성하지 않는 한,이 작업을 수행하기 위해 JCL을 작성하지 않는 한) 다른 모듈과 연결하려면 한 번 링크해야 할 수도 있습니다. 다시 C 라이브러리에 대해. Pedantic이 아니라 : 모든 링크 패스를하고 있다고 확신합니까?

나는 그것이 시도해야 할 많은 후프라는 것을 알고 있으며 아마도 당신은 이미 매뉴얼을 읽었을 것입니다. 그러나 시도하는 데 유용한 것이 있을까요?

또한, 그리고 당신은 아마 이미 이것을 알고 있지만 이 지역 (오류 코드를 찾는 경우)는 무한히 유용합니다. (전체 텍스트 검색 설명서를위한 위의 링크와 함께)

편집하다: 이 페이지 또한 "내장 함수"에 대해 이야기합니다-페이지 하단에 언급 된대로 #undef memcpy "를 사용하려고 시도 할 수 있습니까?

컴파일러 인수를 보여줄 수 있습니까? 금속 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

함수에 대한 닫는 브레이스 '}'가 누락 되었습니까? Semi-Colon 라인 터미네이터가 누락 된 것은 어떻습니까? 브레이스/세미 콜론이 누락되면 Z/OS C 컴파일러는 때때로 이상한/오해의 소지가있는 메시지를 던집니다. 나는 시도 할 필요가 없지만 금속도 그렇게한다고 가정합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top