1
我写一个C库JNA包装,在cygwin下用gcc编译时JNA无效的内存访问。根据我如何执行该包装器JNA Java应用程序要么只是挂起(如果为下蚀单元测试执行)或者与无效存储器异常终止。问题似乎只发生在c库写入stdout或stderr的东西。 这是我最小的(不)工作示例:如下写到标准输出
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目标文件夹中。
因此,使用从你的问题100%准确的例子,没有你可能会产生你描述(挂起或崩溃)的行为的任何addtions? – alk
我建议*不*试图与JVM的cygwin的发挥。 gcc <4可以使用'-mno-cygwin',或者你可以使用mingw在没有cygwin依赖的情况下进行编译。 – technomage
@technomage这是我做的,我只是编译VS2010库。到目前为止一切正常。 – Krassi