JNA写入stdout时内存访问无效

时间:2013-10-09 12:55:49

标签: c jna

我正在为c库编写一个jna包装器,在cygwin下使用gcc编译。根据我执行jna包装器的方式,java应用程序要么挂起(如果在eclipse下作为单元测试执行),要么以无效内存异常终止。问题似乎只发生在c库向stdout或stderr写入内容。 这是我的最小(非)工作示例:

add.c

#include <stdio.h>

int add (int x, int y)
{
    fprintf(stdout, "hello world\n" );
    return x + y;
}

jna wrapper

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目标文件夹中。

1 个答案:

答案 0 :(得分:0)

fprintf使用了错误的语法。实际上是

int fprintf(FILE *restrict stream, const char *restrict format, ...);

您还需要传递字符串格式说明符(%s)。