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 아치)을 표시하는 시스템 속성이 있습니까?
MinGW-w64를보고 있었는데 다운로드했지만 설치 방법을 알 수 없습니까? (저는 zip 파일에서 Windows 64 비트 다운로드를 다운로드 받았지만 불행히도 exe는 실행되지 않습니다 ...) – bgroenks
오, 댕, 그들은 리눅스 바이너리 만 가지고 있습니다. –
또한 main()이 없으면 왜 DLL이 유효하지 않은 것으로 표시되는지 알고 계십니까? – bgroenks