또 다른 "할 수 없다"질문 :Windows에서 loadLibrary()에 대한 Java 프로세스의 "경로"를 수정할 수 있습니까?
나는 32 비트 또는 64 비트 중 하나를 빌드 할 수있는 Java 응용 프로그램이 있습니다. 동일한 머신에서 두 버전을 빌드하고 테스트하고 싶습니다.
두 개의 디렉토리에 빌드되고 출력되는 (실제로는 DLL 집합)로드해야하는 기본 라이브러리가 있습니다.
.../64/.DLL .../X32/ .DLL
는 "..."일부 자바 "java.library.path"
에 설정된 응용 프로그램 시작의 코드는 않습니다 : 32 비트 라이브러리를로드하는 프로그램이 자바 64 비트를 컴파일 할 때 실패하고 그 다음 64 비트 버전을 시도하기 때문에
는try {
System.loadLibrary("x32/native-library");
libraryLoaded_ = true;
} catch(Throwable e) {
try {
System.loadLibrary("x64/native-library");
libraryLoaded_ = true;
} catch(Throwable t) {
log.debug("failed to load module " + e); // : \"" + path + "\".",e);
log.debug(" or win8 module " + t); // : \"" + path + "\".",e);
}
}
이 (부분적으로) 작동합니다.
그러나 native-library.dll은 자체와 동일한 폴더에있는 다른 DLL에 종속되어 있지만 java 프로세스의 시스템 경로 환경 변수에있는 해당 디렉토리가 아니라면 해결되지 않습니다.
그러나 x32 및 x64 디렉터리가 모두 시스템 경로에 있고 둘 다 같은 이름을 가진 경우 종속 DLL이로드되는 모호성이 있습니다.
나는 그것이 거주. 나는이 작업을 수행 할 수있는 방법을있는 폴더에서 첫 번째 종속의로드 네이티브 library.dll을 갖고 싶어
? java.library.path는 명시 적으로로드되는 라이브러리의 종속 dll로드에 영향을 미치지 않는 것 같습니다.
"loadLibrary"를 호출하기 전에 네이티브 라이브러리의 위치를 포함하도록 Java 응용 프로그램의 프로세스에서 경로를 수정해야합니다.
앱 코드에서이 작업을 수행 할 수 있습니까? loadLibrary에 의해로드 된 DLL을 만드는 방법이 있습니까? 프로세스의 경로 요소를 검색하기 전에 먼저 폴더에서 의존성을로드하십시오.