JNA结构创建会带来麻烦

时间:2014-12-29 17:00:45

标签: java c struct java-native-interface jna

Heyho,

我有一些奇怪的问题。 我创建了一个包含结构定义的c库:

typedef struct rgb_ rgb;

struct rgb_ {
    uint8_t r;
    uint8_t g;
    uint8_t b;
};

结构的定义:https://github.com/p000ison/rgb-lm/blob/master/src/lm/led-matrix.h#L12

java side我打电话给图书馆'功能:

    LmLibrary.lmFontLibrary library = lm.lm_fonts_init();
    LmLibrary.lmFont font = lm.lm_fonts_font_new(library, ... font ..., 20);

    for (int x = 0; x < 32; x++) {
        for (int y = 0; y < 32; y++) {
            new rgb_.ByValue();  //<-------- Important line
            lm.lm_matrix_set_pixel(matrix, (short) x, (short) y, RED);

        }
    }

    lm.lm_fonts_print_string(library, matrix, "test", font, (short) 0, (short) 2, RED);
    lm.lm_fonts_font_free(library, font);

https://github.com/p000ison/rgb-lm/blob/master/java/src/main/java/lm/Main.java#L35

使用&#34;重要线路&#34;我的程序在某些&#34;随机&#34;上得到了一个SIGSEGV。点。 通过删除该行,它可以正常工作。

因为测试c程序运行正常,所以c库没有问题:

lmFontLibrary *library = lm_fonts_init();

lmFont *font = lm_fonts_font_new(library, "/usr/share/fonts/truetype/msttcorefonts/arial.ttf", 20);


for (x = 0; x < 32; ++x) {
    for (y = 0; y < 32; ++y) {
        rgb blue = {0, 0, 255};
        lm_matrix_set_pixel(matrix, x, y, blue);
    };
}

lm_fonts_print_string(library, matrix, "Fuck", font, 0, 2, color);

https://github.com/p000ison/rgb-lm/blob/master/examples/simple_pixels.c

被调用的函数:https://github.com/p000ison/rgb-lm/blob/master/src/lm/font.c

编辑:我弄清楚导致我的库崩溃的行:https://github.com/p000ison/rgb-lm/blob/master/src/lm/font.c#L97 我认为这是随机的,与字体库无关。

编辑:运行JNA 4.1.0

1 个答案:

答案 0 :(得分:1)

所以在绑定了一些新的东西后,总会导致某种内存损坏我尝试使用我的linux发行版分发的jna版本。 libjna-java debian软件包提供的版本为3.2.7

安装数据包并运行我的java程序之后,一切都运行良好。

不是一点点专业人士,但似乎JNA覆盖了我堆的某些部分。

有关测试环境的更多信息:

  • 平台:Linux pi 3.12.35+#730 PREEMPT Fri Dec 19 18:31:24 GMT 2014 armv6l GNU / Linux
  • 硬件:Rapsberry PI B
  • 使用SIGSEGV失败的JNA 4.1.0

JVM崩溃:http://pastebin.com/dFFx4abC