2010-01-02 6 views
5

JNI를 사용하는 Java 라이브러리를 컴파일하려고합니다. 프로그램을 시작할 때 UnsatisfiedLinkError가 발생하여 DLL에서 특정 메서드를 찾을 수 없다는 오류가 발생합니다.g ++ : 내 보낸 기호를 해제하는 방법

더 자세히 살펴보면 컴파일 및 링크에 사용하는 g ++에서 메서드 이름에 "@ 8"또는 "@ 16"과 같은 접미사를 추가하여 메서드 이름을 변경한다는 것을 알았습니다. 아무도 올바른 컴파일러 옵션을 알고 맹 글링을 비활성화 할 수 있습니까? 미리 감사드립니다!

EDIT : 저는 MinGW를 Eclipse + CDT 플러그인을 통해 사용하고 있습니다. JNI를 들어

답변

12

는 연결 상에 GCC에 추가하고 stdcall 별명 매개 변수를 추가 할 필요가 GCC로 컴파일 윈도우 DLL이 작업을 호출

gcc -Wl,--add-stdcall-alias 
DLL에 올바른 함수 이름을 추가합니다

때문에 JNI를 통한 호출을 가능하게합니다.

+0

감사합니다. 이것은 결국 내 문제를 해결했습니다. 이 매개 변수를 사용하면 DLL의 각 메소드에 데코 레이팅되고 꾸며지지 않은 버전이 있으며 Java 프로그램이 작동합니다. D –

+0

@Mavrik이 내용을 작성해 주셔서 감사합니다. 문제는 알고 있지만 해결 방법은 알지 못했습니다. – bmargulies