写到标准输出时JNA无效的内存访问(JNA Invalid memory access when w

2019-09-29 15:05发布

我写AC库JNA包装,在cygwin下用gcc编译。 根据我如何执行该包装器JNA Java应用程序要么只是挂起(如果为下蚀单元测试执行)或者与无效存储器异常终止。 这个问题似乎只发生在C库写的东西无论是标准输出或标准错误。 这是我最小的(不)工作示例:

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

Answer 1:

您正在使用错误的语法fprintf 。 它实际上是

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

您需要将字符串格式说明符( %s )了。



文章来源: JNA Invalid memory access when writing to stdout
标签: c jna