2016-09-08 2 views
0

원본 멤버에 다른 멤버를 포함하려고합니다. as400 : C 헤더 포함

#include "/QSYS.LIB/MYLIB.LIB/TEST.FILE/HEADER.MBR" 

내가 crtcmod module(main) srcfile(test) srcmbr(main) 컴파일

,
가 나는 파일이 발견되지 않는 등라는 오류가 발생합니다.

명령 dsplnk obj('QSYS.LIB/MYLIB.LIB/TEST.FILE/HEADER.MBR')을 사용하는 경우

,

이 파일을 찾을 수 없습니다. 왜 내 C는 일을 포함하지 않습니까?

이 파일 시스템은 내가 액세스 할 수있는 유일한 시스템이기 때문에 사용해야합니다.

+0

당신은'사용법 #include "HEADER.MBR"'과는 포함 파일 검색 경로에'/ QSYS.LIB/MYLIB.LIB/TEST.FILE'를 추가하도록 컴파일러에 지시 할 수 있나요? 전통적인 옵션은'-I/QSYS.LIB/MYLIB.LIB/TEST.FILE'이지만, 특정 컴파일러에 적용 가능한지 전혀 알 수 없습니다. –

+0

예, 포함 할 때와 동일한 오류가 발생해도 "헤더"로 변경됩니다.MBR "및 추가 컴파일 옵션 incdir ('QSYS.LIB/MYLIB.LIB/TEST.FILE') –

+0

아마도 액세스 제어 문제 일 수 있습니다. 파일이 존재할 경우 컴파일 프로세스를 실제로 열고 읽을 수 있습니까? –

답변

1

해결책을 찾았습니다. QSYS 경로를 사용하기 만하면됩니다.

#include "HEADER" // if in the same file 

또는 절대 경로를 들어

#include "MYLIB/MYFILE(HEADER)" 

나는 절대 경로에서 컴파일 스트림 파일에서 컴파일 한, 작업을 포함한다. 그러나 QSYS 경로를 사용하기 때문에 디스플레이 파일을 포함하는 #pragma mapinc 지시문이 더 이상 작동하지 않습니다.

0

IBM i C 및 C++ 컴파일러에는 include 코드를 처리 할 수있는 특수 코드가 있습니다. ,합니다 (SRCFILE 매개 변수를 사용하여)

  • 소스는 소스 실제 파일에있는 경우 : 발견 한 때

    #include <stdio.h>

    그것은이 두 가지 방법 중 하나에 포함 검색합니다 등 포함 검색 경로를 통해 STDIO이라는 구성원이있는 H이라는 파일을 검색하고이를 포함시킵니다. 기본 검색 경로는 QSYSINC 라이브러리 및 라이브러리 목록에있는 모든 라이브러리입니다.

  • 원본이 (SRCSTMF 매개 변수를 사용하는) IFS에있는 경우, IFS 검색 경로를 통해 검색하며 기본값은 /QIBM/include입니다.

은 당신이 할 수있는, 자신의 헤더를 찾으려면 다음 두 가지 중 하나

  • 소스는 소스 실제 파일에있는 경우, 당신은 H라는 파일을 만들고 멤버로 헤더를 추가 할 수 있습니다 그 파일. 그런 다음 해당 파일이 들어있는 라이브러리를 라이브러리 목록에 추가하십시오.
  • 소스가 IFS에있는 경우 헤더를 IFS 디렉토리에 넣고 해당 디렉토리를 INCDIR 매개 변수에 CRTBNDC 또는 CRTCMOD으로 추가 할 수 있습니다.

예 :

CPYF FROMFILE(MYLIB/TEST) TOFILE(MULIB/H) FROMMBR(HEADER) TOMBR(HEADER) CRTFILE(*YES) 

ADDLIBLE MYLIB 

crtcmod module(main) srcfile(test) srcmbr(main)