C 写入标准输出时,JNA内存访问无效

C 写入标准输出时,JNA内存访问无效,c,jna,C,Jna,我正在为c库编写一个jna包装器,在cygwin下使用gcc编译。根据我执行jna包装器的方式,java应用程序要么挂起(如果在eclipse下作为单元测试执行),要么以无效内存异常终止。问题似乎只发生在c库向stdout或stderr写入内容时。 以下是我的最小(非)工作示例: add.c 在cygwin下编译c文件,如下所示: gcc -g -Wall -c add.c gcc -shared -o add.dll add.o 如果我删除fprintf行,一切正常。add.dll和cygw

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

add.c

在cygwin下编译c文件,如下所示:

gcc -g -Wall -c add.c
gcc -shared -o add.dll add.o

如果我删除fprintf行,一切正常。add.dll和cygwin1.dll都位于java目标文件夹中

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

int fprintf(文件*限制流,常量字符*限制格式,…)


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

因此,使用问题中的100%精确示例,不添加任何内容,您就可以产生您描述的行为(挂起或崩溃)?我建议不要尝试让cygwin与JVM一起玩。gcc@technomage这就是我所做的,我只是用VS2010编译了这个库。到目前为止一切都很好。@alk是的,正如我说的M(N)WE;)
public interface Add extends Library
{
    Add INSTANCE = (Add) Native.loadLibrary("add", Add.class);
    int add(int x, int y);
}
gcc -g -Wall -c add.c
gcc -shared -o add.dll add.o