1
cygwin에서 gcc를 사용하여 컴파일 된 c 라이브러리 용 jna 래퍼를 작성하고 있습니다. jna 래퍼를 실행하는 방법에 따라 Java 응용 프로그램이 중단되거나 (일식 아래 단위 테스트로 실행되는 경우) 잘못된 메모리 예외로 종료됩니다. 문제는 C 라이브러리가 stdout 또는 stderr에 무언가를 씁니다. 다음과 같이JNA stdout에 쓸 때 유효하지 않은 메모리 액세스
add.c
#include <stdio.h>
int add (int x, int y)
{
fprintf(stdout, "hello world\n");
return x + y;
}
JNA 래퍼
public interface Add extends Library
{
Add INSTANCE = (Add) Native.loadLibrary("add", Add.class);
int add(int x, int y);
}
Cygwin에서 아래에있는 C 파일을 컴파일 : 여기 내 최소 (안) 작업 예입니다
gcc -g -Wall -c add.c
gcc -shared -o add.dll add.o
fprintf 줄을 제거하면 모든 것이 잘 작동합니다. add.dll과 cygwin1.dll은 모두 java 대상 폴더에 있습니다.
추가 질문없이 100 % 정확한 예제를 사용하면 설명하는 동작 (멈춤 또는 충돌)이 발생할 수 있습니까? – alk
JVM에서 cygwin을 재생하려고하지 않는 것이 좋습니다. gcc <4는'-mno-cygwin'을 사용하거나, mingw를 사용하여 cygwin 의존성없이 컴파일 할 수 있습니다. – technomage
@technomage 이것은 내가 한 일로, 방금 VS2010으로 라이브러리를 컴파일했습니다. 지금까지 모든 것이 잘 작동합니다. – Krassi