몇 가지 기사를 읽은 후 대부분은 JNI에서 Android에서 C 코드를 내보내는 방법을 보여줍니다. 내 문제는 C++ 클래스에 많은 오버로드 된 함수가 있다는 것입니다. JNI를 사용하여 내보내기/감추기를 원한다면 - "extern"C를 건너 뛸 수 있다면 그렇게 할 수 있습니까? 내가 맞으면, 함수의 이름 맹 글링을 피하는 데 사용됩니다.Android - JNI에서 "extern"C가 필수입니까?
답변
C 코드가 기호로 C++ 코드를 호출 할 수 있어야 할 때마다 이름 변환을 제거해야합니다. 컴파일하는 코드로 시작한다고 가정 할 때 관심있는 부분 주위의 extern "C"
을 제거하십시오. 여전히 컴파일하면 안전합니다. .. 안전하지 않은 경우 링커에서 정의되지 않은 참조 오류가 발생합니다.
답변 감사합니다. 나는 어려운 길을 배워야한다고 생각한다! extern을 제거하고 테스트! – Wajih
올바른 생각이지만 "컴파일 중"은 충분한 테스트가 아닙니다. 포스터는 jni 라이브러리와 함께 작동합니다. 즉, 동적 링크는 런타임에 이름별로 수행됩니다. C++을 정적으로 호출하는 C 코드 (또는 이와 유사한)가 없으면 unworkably mangled 이름이 생성되어 라이브러리에 제대로 연결되지만 런타임시 jni가 동적 링커에게 해당 이름으로 메소드를 찾도록 요청할 때 실패합니다. –
@ChrisStratton 예, 아주 좋은 지적입니다. – mah
- 1. Android JNI에서 라이브러리 헤더를 사용할 때의 문제
- 2. Android jni에서 문자열을 해제하는 방법은 무엇입니까?
- 3. FindClass 및 GetMethodID가 android jni에서 실패합니다.
- 4. Android JNI에서 Java 메소드 호출 유지
- 5. Infinispan.xml은 필수입니까?
- 6. XML 속성은 필수입니까?
- 7. Comparation는 JNI에서
- 8. Facebook 앱 제출은 필수입니까?
- 9. XAML - LayoutRoot가 필수입니까?
- 10. 전보 webhook : SSL은 필수입니까?
- 11. 함수 선언이 필수입니까?
- 12. Worklight : Worklight 서버가 필수입니까?
- 13. @ 3x 이미지는 필수입니까?
- 14. 양식을 사용하는 HTML은 필수입니까?
- 15. 스러스트 zip_iterator - typedef가 필수입니까?
- 16. MVC에 REST가 필수입니까?
- 17. MVC이 드롭 다운은 필수입니까?
- 18. 카프카 : 사육사는 필수입니까?
- 19. 활동의 주된 목적은 필수입니까?
- 20. JNI에서 할당 한 배열에 대해서
- 21. JNI에서 char ** 매핑
- 22. JNI에서 참조로 전달하는 방법?
- 23. JNI에서 인터페이스 사용
- 24. JNI에서 bytearray를 읽는 방법?
- 25. JNI에서 자바로 바이트 [] 반환
- 26. JNI에서 ByteBuffer 조작
- 27. JNI에서 정적 라이브러리 연결
- 28. 코코아 클래스가 JNI에서 시작되었습니다.
- 29. JNI에서 파일 사용
- 30. JNI에서 Java 메소드 호출
@mah이 답변을 작성하십시오. [tag : c] 및 [tag : C++] 이외의 다른 태그는 질문과 전혀 관련이 없습니다. –
@ πάνταῥεῖ answerd; 감사. – mah
위키피디아는 JNI가 이름 맹 글링을 사용하지 않는다고 생각하는 것 같습니다. 따라서 JNI와 C++을 혼합 할 때 extern "C"가 필요할 것입니다. http://en.wikipedia.org/wiki/Java_Native_Interface – user3386109