날마다 새롭게 또 날마다 새롭게

[cygwin] gcc 컴파일 에러 - unknown type name __int64 본문

프로그래밍/Android

[cygwin] gcc 컴파일 에러 - unknown type name __int64

아무유 2015. 2. 17. 14:40

참고 : http://stackoverflow.com/questions/27891478/error-when-compiling-in-cygwin


GCC Version : 4.9.2

Cygwin x64


Cygwin 에서 gcc로 jni 컴파일 할 때, 다음과 같은 에러가 발생하는 경우가 있다.

jni_md.h 에서 __int64 타입을 모른다는 내용이다.


$ gcc -fPIC -c -I"$JAVA_HOME"/include -I"$JAVA_HOME"/include/win32 helloworld.c

helloworld.c:1:0: warning: -fPIC ignored for target (all code is position independent)


 ^

In file included from /cygdrive/c/Program Files/Java/jdk1.8.0_31/include/jni.h:45:0,

                 from kr_or_aesop_HelloWorld.h:2,

                 from helloworld.c:2:

/cygdrive/c/Program Files/Java/jdk1.8.0_31/include/win32/jni_md.h:34:9: error: unknown type name ‘__int64’

 typedef __int64 jlong;



이 에러를 해결하기 위해서는 $JAVA_HOME/include/win32/jni_md.h 수정이 필요하다.


원본 파일은 다음과 같다.


typedef long jint;
typedef __int64 jlong;
typedef signed char jbyte;

를 다음과 같이 수정한다.


typedef long jint;
#ifdef __GNUC__
typedef long long jlong;
#else
typedef __int64 jlong;
#endif
typedef signed char jbyte;

그리고 fPIC ignored for target 에러는 


$ gcc -fPIC -c -I"$JAVA_HOME"/include -I"$JAVA_HOME"/include/win32 helloworld.c

helloworld.c:1:0: warning: -fPIC ignored for target (all code is position independent)


-fPIC 를 -fpic 로 변경해서 실행해주면 된다.


Comments