2010-08-04 3 views
1

현재 Java Native Interface (JNI)를 사용하여 런타임 중에 Java 응용 프로그램에 동적으로 링크 할 수있는 공유 라이브러리로 컴파일하려는 일부 C++ 코드가 있습니다. 내가 직면하고있는 문제는 - 다른 라이브러리 자체에서 호출을 컴파일하려고하는 C++ 코드로 많은 클래스와 다른 헤더 파일을 사용합니다. .dll 파일로 만들려고 할 때 많은 링커 오류가 발생합니다. 즉, 외부 기호가 확인되지 않았기 때문에 C++ 코드에서 호출되는 소스 코드에 속합니다. 이제는 모든 외부 코드 (사실 VTK라는 라이브러리)를 내 소스에 복사하지 않아도됩니다. - 필자는 자체적으로 C++ 코드의 기능을 가진 동적으로 링크 가능한 라이브러리를 원합니다. 내가 복제하고 싶지 않은 외부 코드를 인식 할 수 있어야합니다).링크 오류 공유 라이브러리를 만들 때

질문이 있으시면 언제든지 문의하십시오.

답변

1

Windows DLL을 연결할 때 사용하지만 정의되지 않은 기호를 찾을 수있는 곳을 말해야합니다. 정적 라이브러리에 링크하면 해당 라이브러리의 모든 코드가 DLL에 복사됩니다. 그러나 다른 DLL에 링크하는 경우 해당 라이브러리의 코드는 DLL에 남아 있으며 DLL에 바인딩 된 모든 것은 다른 DLL에 대한 링크입니다. 따라서 VTK가 DLL로 제공되면 DLL에 링크 할 수 있어야하고 자신의 DLL을 부 풀리지 않아야합니다. 한 가지 까다로운 부분은 주어진 DLL에 대해 실제로 .dll 파일 자체와 연결하지 않고 "가져 오기 라이브러리"라고 불리는 것에 연결하는 것입니다.이 라이브러리는 일반적으로 DLL 및 DLL과 동일한 기본 이름을가집니다. lib 확장자. 따라서 VTK.dll 파일 형식으로 VTK를 사용할 수있는 경우 해당 VTK.lib 파일을 찾아 DLL을 빌드하는 링크 명령에 추가해야합니다.

+0

내가 어떻게 cmake를 사용하여 할 수있는 아이디어? – sparkFinder

2

정적 라이브러리 (일반 정적 라이브러리 인 경우) 또는 동적 라이브러리 (DLL) 인 경우 다른 라이브러리와 링크해야합니다. 링커와 로더가 심볼을 해석 할 수있는 다른 방법은 없습니다.

관련 문제