JNI C++ 클래스를 통해 C++ 클래스를 호출하여 libmagic.so에서 제공하는 'file'명령 기능에 액세스하는 Java 클래스가 있습니다.Java 1.6을 사용하는 Redhat AS 4 seg fault 호출 magic_buffer
- 는 C++ 클래스는 컴파일 및 메인 A C++()
- 그것은 자바 1.5과 1.6을 실행 RHEL 5에서 잘 작동으로 잘 실행; RHEL 4 실행중인 자바에서 잘 작동합니다 - 그것은
는이 독방 감금 자바와 RHEL 4에 26,234 고장 발생 - 그것은 1.5
1.6
독방 감금 오류 :
은에서 발생 call char * retptr = magic_buffer (쿠키, bigbuf, 1000); char * retptr = "좋은 안전한 문자열"인 경우 오류가 발생하지 않습니다. 치환 됨. 이것이 seg fault가이 호출에서 발생한다고 결론을 짓는 이유입니다.
대체 호출 인 char * retptr = magic_file (쿠키, "/ usr/include/magic.h")을 사용합니다. 이 호출은 파일 내용이 가득 찬 버퍼가 아니라 파일의 완전한 경로 이름 만 요구하는 동일한 파일 유형 메시지를 반환하므로 버퍼 문제를 디버깅합니다. 또한 RHEL4/java 1.6 테스트 VM에 seg 오류가 발생합니다. 따라서 문제는 내 코드에서 잘못된 포인터 또는 넘치는 버퍼로 보지 않는다고 결론 내릴 수 있습니다.
magic_buffer는 libmagic.so에 대한 호출입니다. 이전에 코드에서이 lib에 대한 다른 성공적인 호출이 이루어졌습니다. 그러나이 호출에는 lib 마법 데이터베이스/usr/share/file/magic이 관련됩니다.
C++을 실행 파일로 컴파일하고 문제가있는 컴퓨터에서 실행하면 정상적으로 작동합니다. 여기
A. JNI의 참여가 # 4
B.의 # 1/# 2, 나는 그것이 JNI 구현이라고 생각하지 않기 때문에 때문에,이 발행물.
C. # 1, # 2 및 # 4 때문에 나는 이것이 C++ 구현 문제라고 생각하지 않습니다.
의견이나 제안이 있으십니까? (처음에는 VMWare에서 실행되었으므로 이제는 VM 관련 문제없이 테스트 됨)
업데이트 후에 발생 했습니까? RHEL4의 Java 1.5로 돌아갈 수 없습니까? – stacker
JNI 전문가가 검토 할 C++ 코드를 게시 한 경우 도움이 될 수 있습니다. –
업데이트가 관련되지 않았습니다. 이것은 새로운 개발을 테스트하고 있습니다. RHEL4/5와 Java 1.5/1.6이 혼합 된 환경이 있습니다.나는 무엇이 잘못되었는지에 대한 이해가없는 해결 방법을 찾기보다는 문제의 원인을 밝히고 싶습니다. – cvsdave