2012-05-09 2 views
1

Visual Studio 2010이 설치되어 있고 오류없이 성공적으로 빌드 할 수있는 다른 사람의 프로젝트가 있습니다. Wrapper.dll, 을 얻었고 JNA를 사용하여 액세스하려고합니다. Win7 64-bit를 사용하고 있습니다.JNA에서 네이티브 DLL에 액세스하려고 시도했지만 모듈을 찾을 수 없음 오류, 종속성이 누락되었습니다.

하지만 오류가 발생합니다 : java.lang.UnsatisfiedLinkError : 'Wrapper'라이브러리를로드 할 수 없습니다. 지정한 모듈을 찾을 수 없습니다.

Wrapper.dll은 물론 올바른 폴더에 있으며 32 비트 dll이며 Java 프로그램도 32 비트의 JRE를 사용하므로 오류의 원인이 아닙니다.

내가 * .dll을 누락 여부를 확인하기 위해 DependencyWalker을 사용 :

  • MSVCP80.DLL
  • MSVCR80.DLL을
  • GPSVC.DLL
  • IESHIMS.DLL

을 그리고 네, 실종 됐습니다. 오류가 이러한 DLL이 없다는 것과 관련이 있다고 결론 내릴 수 있습니까? 그러나 Visual Studio가 올바르게 컴파일되고 오류가 발생하지 않는 이유는 무엇입니까? Wrapper.dll에서 이러한 함수에 액세스하기 위해이를 해결하는 방법은 무엇입니까?

나는 또한 dll을 다운로드하는 것이 옳지 않을 수도 있음을 읽었습니다. 는 (그 관심의 경우 Wrapper.dll는 Visual Studio 2005에서 만들어진 다른 DLL 또는 소스 코드에 의존하는 것을 알고있다.)

편집 : 내가 발견

이 Wrapper.dll가 의존 아마 MSVS2005에서 빌드 된 다른 세 dll에. 이들은 위에서 언급 한 DLL (dependencywalker로 확인)을 필요로하므로 Wrapper.dll도 링크되어 있다고 생각합니다.

그래서 이러한 오래된 DLL을 없애려면 어떻게해야합니까? VS2010 또는 을 사용하여 다른 세 DLL을 빌드해야 할 필요가 있습니다. 항상 문제가되는데, 이는 이전 DLL을 붙여 넣기하여 붙여 넣기하면 해당 DLL에 종속 된 사전 컴파일 라이브러리를 사용해야합니다.

이 DLL을 붙여 넣지 않고 다른 시스템에서도 프로그램을 실행할 수있는 방법이 있습니까?

+0

안녕하세요. 저는 여러분과 같은 프로젝트를 정확하게 개발하고 있으며, 이전과 같은 오류를 겪고있는 것과 같은 방식으로 진행하고 있습니다. 그래서이 문제를 제거하는 단계를 말해주십시오. 나는 여기에 대답은 제공되지만 여전히 정확한 단계를 말해줘 내가 dll을 어떻게 만들어야 만하는지 나는 dll을 만들 때 어떤 변화를해야 하는가? MSVS2010을 사용하여 래퍼 DLL을 만듭니다. – Jony

+0

@Bryon이 문제를 해결하기 위해 수행 한 단계를 도와주세요. – Jony

+0

DLL이 있거나 컴파일 할 수 있습니까? 어떤 비트 시스템을 사용합니까? Windows 32 또는 64 비트? DLL 32 또는 64 비트가 맞습니까? 자바 환경과 일식은 어떻습니까? –

답변

2

로드하는 데 필요한 모든 DLL을 시스템에서 사용할 수 있어야합니다. jna.library.path를 정의하면 JNA가 초기에로드 된 DLL과 종속 DLL을 찾습니다. 또한 java.library.path (본질적으로 PATH)는 종속 DLL을 검색합니다.

MSVS는 해당 환경에서 코드를 작성, 디버깅 및 실행하는 경우 PATH 외에도 경로를 사용하는 경우가 많습니다.

솔루션 :

) 정말 필요없는 종속성을 제거하십시오. DLL을 다르게 빌드하도록 MSVS에 명령하는 것을 포함 할 수 있습니다.

b) 사용자 지정 DLL 옆에 비 시스템 DLL을 포함하거나 PATH/java.library에 위치를 포함 할 수 있습니다.경로)

편집

가) 당신은 당신과 같은 디렉토리에 문제가되는 DLL을 포함 할 수 있습니다. 이것은 타겟 시스템에 미치는 영향은 매우 적지 만, 어떤 시스템에있을 것으로 예상되는 DLL이라면 그렇게하지 않아도됩니다. 모든 시스템 DLL에 액세스 할 수 있도록 java.library.path를 조정하는 것이 좋습니다.

b) 종속 ​​DLL을 다시 컴파일하고 이전 버전과의 호환성 및 명시 적 연결에 대해보다주의해야합니다. 그러나 DLL에서 사용하는 기능에 따라 종속성을 제거하지 못할 수도 있습니다.

MSVC [RP] 80.DLL은 각각 C 및 C++ 런타임입니다. 이전 버전을 링크 할 수도 있고 연결하지 못할 수도 있습니다.

IESHIMS.DLL은 IE에 포함되어 있어야하며 시스템에 있어야하지만 프로그램에서 액세스 할 수없는 경로에 있어야합니다.

GPSVC.DLL은 그룹 보안 정책과 관련이 있으므로 시스템에서 사용할 수 있어야합니다 (DLL이 도입 될 때마다 모듈로 제공되어야 함).