c - JNA 写入 stdout 时内存访问无效

标签 c jna

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

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

最佳答案

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

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

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

关于c - JNA 写入 stdout 时内存访问无效,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19272671/

相关文章:

java - 结构内部的 JNA 结构

c - 在 C 中将数据复制到空字符串时出现意外截断

c - 在不使用广播的情况下一次从 UDP 服务器向所有客户端发送相同的信息

java - 如何在JNA中制作结构?

java - JVM 线程是否始终保持它们到 OS 线程的映射

java - 如何在 JNA 中映射枚举

java - JNA .FindWindow 与正则表达式

objective-c - 我应该在哪个文件夹中放置一个文件作为 xcode 4 中的命令行参数传递?

c - PyCUDA 无法包含 <curand_kernel.h> - 错误 : no extern "C" linkage

c - C语言中如何对链表进行排序