我正在为 ac 库编写一个 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 目标文件夹中。