2016-07-16 2 views
1

"g ++"을 실행하여 JNI를 만들 때 "유형을 지정하지 않았습니다."오류가 발생합니다. 다음'BYTE'는 유형을 지정하지 않습니다. 'BOOL'이 선언되지 않았습니다.

g++ -shared -o finger.dll FingerPrintJNI.c 

오류 메시지

In file included from FingerPrintJNI.c:4:0: 

IMM64.h:21:2: error: 'BYTE' does not name a type 
BYTE Data[MAX_FEATUREVECT_LEN]; 
^~~~ 

IMM64.h:26:2: error: 'BYTE' does not name a type 
BYTE Data[MAX_INDEXINFO_LEN]; 
^~~~ 

IMM64.h:31:2: error: 'BYTE' does not name a type 
BYTE Data[MAX_INDEXINFO_LEN_1]; 
^~~~ 

IMM64.h:44:2: error: 'BYTE' does not name a type 
BYTE kind; 
^~~~ 

IMM64.h:55:2: error: 'BYTE' does not name a type 
BYTE kind; 
^~~~ 

IMM64.h:73:2: error: 'BOOL' has not been declared 
BOOL *bResult, unsigned int *uiMatchScore, unsigned int *uiHit, Pair_t *hCPairs = NULL); 

헤더 파일은 다음과 같은 형태입니다. 는

XXX_API char * __stdcall XXXXDCI_GetVer(); 
다음

질문이 있습니다 (I은 보안상의 이유로 전체 코드를 공유 할 수 없습니다).

  1. "BYTE"는 대문자로 선언되었습니다. Visual Studio와 관련이 있습니까?

  2. 헤더 파일에 "__stdcall"이 있습니다. 헤더 파일이 C++이라는 것을 의미합니까?

  3. 위의 헤더 파일을 사용하여 JNI를 작성해야합니다. 나는 무엇을해야만 하는가? g ++ 컴파일러로 할 수 있습니까? 또는 gcc 컴파일러? Visual Studio가 없으면?

답변

1
  1. BYTEBOOL 각각 unsigned char과 같이 windows.hint#defined에있다. #include<windows.h>이거나 #define WINDOWS_LEAN_AND_MEAN 또는 typedef 이후 가능합니다.
  2. __stdcall은 WinAPI 기능에 사용되는 표준 호출 규칙입니다.
  3. Stackoverflow에 대한 다른 답변을 확인하십시오. 여기 다른 곳에서 자세히 설명 된 내용을 복제 할 필요가 없습니다.
0

나는 (리눅스에서) 매우 유사한 오류 메시지를 보였다. google c++ style guide의 권장 사항을 따르면 - int8_t, int16_t, int64_t 등 등의 형식을 선호하며 <cstdint>으로 정의됩니다. 따라서 부호없는 문자의 짧은 이름 인 BYTE의 경우 uint8_t을 사용했습니다. 이 해결책은 리눅스와 windows에 적용도 있습니다.

관련 문제