java - JNA结构创建带来麻烦

标签 java c struct java-native-interface jna

嘿嘿,

我有一些奇怪的问题。 我创建了一个包含结构定义的 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 )

当使用“重要行”调用时,我的程序在某个“随机”点得到一个 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

最佳答案

因此,在添加了更多总是导致某种内存损坏的新东西之后,我尝试使用我的 Linux 发行版分发的 jna 版本。 libjna-java debian 包提供的版本为 3.2.7

安装数据包并使用它运行我的 java 程序后,一切正常。

不太懂 c pro,但 JNA 似乎覆盖了我堆的某些部分。

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

  • 平台:Linux pi 3.12.35+ #730 PREEMPT 12 月 19 日星期五 18:31:24 GMT 2014 armv6l GNU/Linux
  • 硬件:Rapsberry PI B
  • JNA 4.1.0 因 SIGSEGV 失败

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

关于java - JNA结构创建带来麻烦,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27692933/

相关文章:

C基数排序字符串数组

java - 基于动态正则表达式的 XPath 搜索

java - Android 构造函数未定义

c - 由于 void 指针和整数转换错误,pthread_create 无法工作

c - 单变量多项式加法

c++ - 这个模式 : using a struct to contain a single method 有什么意义

c - 当我将函数从 main 中分离出来时,结构出现问题

java - 如何在 java web 服务中定义 @WebParam 的默认值?

java - 在 Android 无法正常工作的情况下从 Firebase 检索数据

c++ - 为什么打包结构的大小在这里是 5 而不是 4 字节?