2012-12-08 3 views
1

GCC 플래그 -c 및 -o Name.dll을 사용하여 Windows (64 비트)에서 기본 DLL 파일을 컴파일했습니다. 내가 System.load ("fullpahhere")을했을 때JNI : 64 비트 기본 라이브러리 컴파일 문제

, 나는이 오류가 :

java.lang.UnsatisfiedLinkError: RenderControl.dll: %1 is not a valid Win32 application 

나는 C 소스에 빈 main() 메소드를 추가하고 -c 플래그를 제거 다시 컴파일하면, UnsatisfiedLinkError (64 비트 컴퓨터에서 32 비트 DLL을로드 할 수 없다는 메시지가 표시됨)와 함께 실패합니다.

Java가 main 메소드를 사용할 수없는 DLL을 호출하는 이유는 무엇입니까? DLL 파일과 JNI의 모든 부분을 망칠 수 있습니까?

업데이트 나는 주() 문제를 해결. 이 GCC 호출 셋업은 다음과 같이 작동합니다 :

gcc -Wall -D_JNI_IMPLEMENTATION_ -Wl,--kill-at -I "C:\Program Files\Java\jdk1.6.0_32\include" -I "C:\Program Files\Java\jdk1.6.0_32\include\win32" -shared *.c -o lib.dll 

그러나 여전히 JVM 아키텍처 문제를 알아 내야합니다.

어디에서 64 비트 코드를 컴파일 할 수있는 MinGW 설치를 찾을 수 있습니까? 그것은 내 표준 MinGW 설치에만 32 비트 않습니다 보인다.

만약 내가 그것에 익숙해 질 수 있다면, 자바로로드 할 라이브러리를 어떻게 결정합니까? JVM 아치 (아니요, OS 아치)을 표시하는 시스템 속성이 있습니까?

답변

1

MinGW32 컴파일러를 사용하면 64 비트 코드를 생성 할 수 없습니다. 이것은 의도적 일 가능성이 가장 큰 항목입니다. 빨리 쳐다 본 다른 사람들과 비슷한 문제는 당신이 64 비트 자바와 32 비트 네이티브 바이너리를 사용하려고하는 것 같습니다.

mingw-w64으로 컴파일 해보고 문제가있는 지 확인하십시오.

라이브러리가 라이브러리 경로에없고, 전체 경로가 System.load인데도 찾을 수없는 경우도 있습니다.이 경우 DLL이 올바른지 확인해야합니다 네이티브 라이브러리의 위치.

+0

MinGW-w64를보고 있었는데 다운로드했지만 설치 방법을 알 수 없습니까? (저는 zip 파일에서 Windows 64 비트 다운로드를 다운로드 받았지만 불행히도 exe는 실행되지 않습니다 ...) – bgroenks

+0

오, 댕, 그들은 리눅스 바이너리 만 가지고 있습니다. –

+0

또한 main()이 없으면 왜 DLL이 유효하지 않은 것으로 표시되는지 알고 계십니까? – bgroenks

1

http://tdm-gcc.tdragon.net/을 확인하여 위에서 언급 한 MinGW-w64 용 Windows에 쉽게 설치할 수있는 TDM-GCC를 다운로드하십시오. TDM-GCC를 설치 한 후 다음 코드를 사용하여 64 비트 dll을 생성 할 수 있습니다.

"C:\MinGW64\bin\gcc.exe" -m64 -c -I"C:\Program Files\Java\jdk1.6.0_26\include" -I"C:\Program Files\Java\jdk1.6.0_26\include\win32" HelloWorld.c 

64 비트가되는 것은 "-m64"입니다. 이것은 HelloWorld.c C 코드 소스 파일과 동일한 디렉토리에서 실행됩니다. 이것은 실행과 같은 디렉토리에 HelloWorld.o C 코드 오브젝트 파일을 생성합니다.

관련 문제