2010-03-20 2 views
3

즉, DLL 이름 끝에 8이 추가되어 문제를 일으킬 수 있습니다. 분명히 gcc에서 --kill-at 플래그를 사용하면이 문제를 해결할 수 있지만 MSVC에 대한 비슷한 제안을 찾을 수 없습니다.gcc --kill-at에 해당하는 Visual C++가 있습니까?

편집 : 조금 더 정보 :

내가 일할 수있는 C++ JNI DLL을 얻기 위해 노력하고있어,하지만 난 항상 스레드 "스레드 0"에서 java.lang.UnsatisfiedLinkError에 예외를 얻을 : eveTimers.PollThread .checkKeyboardChanges() V 다시 작동하는 프로그램 대신. 나는 dll을보기 위해 quickview를 사용했고 그것은 http://www.velocityreviews.com/forums/t143642-jni-unsatisfied-link-error-but-the-method-name-is-correct.html가 제안하는 것이 @ 8 일 가능성이있는 @ 8로 꾸며진다는 것을 발견했다. 도움말 크게 감사하겠습니다.

+0

문제를 해결 했습니까? 그렇지 않다면 JNI DLL의 소스 코드를 가지고 있습니까? 그것을 만들었습니까? –

+0

문제가 해결되었습니다. 내가 말하고있는 것처럼 컴파일을 실행하기 위해 정리를하고 무작위로 손을 댔다. – seurimas

+0

첫 문장 만 읽으면 시작 문장으로 코딩 한 날을 절약 할 수 있습니다 .-P – fommil

답변

1

[아래 코멘트와 관련없는 것으로 편집].

또 다른 접근법은 specify export names in a .DEF file입니다.

호출 규칙 및 링커 설정도이 설정에 영향을 줄 수 있습니다. 솔직히 말해서 약간 검은 색 예술입니다. MSVC를 12 년 동안 사용해도 쉽게 해결할 수있는 성가신 이름으로 불규칙적 인 문제를 겪을 수 있지만 다른 설정이 상호 작용하는 방식을 고려할 때 실제로 수정하는 것은 쉽지 않습니다.

+0

.DEF 파일 만 사용하면 완전히 맹 글링을 방지 할 수 있습니다. 다른 메소드는 stdcall 함수에 @ (인수의 바이트 수)를 접미사로 붙이고 _는 cdecl 함수에 접두사를 붙입니다. –

+0

물론 간단하지는 않습니다. .DEF 파일 경로를 이동하여 이름이 여전히 맹 글링되고 있음을 알 수있는 시나리오가 있습니다. 이런 종류의 솔루션은 언제나 MSVC 링크 단계를 실제로 이해하는 것입니다. 내 경험에 비추어 볼 때 다른 환경에서 접근하는 사람들을위한 단순한 명제입니다. –

관련 문제