JavaJNA结构创建带来麻烦
嘿嘿,
我有一些奇怪的问题。 我创建了一个包含结构定义的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
# 1 楼答案
因此,在绑定了一个新的、更多的东西(这些东西总是会导致某种内存损坏)之后,我尝试使用linux发行版分发的jna版本。libjnajavadebian包提供的版本是3.2.7
安装包并运行java程序后,一切都很好
没有一点c专业,但似乎JNA过度编写了我堆中的某些部分
有关测试环境的更多信息:
JVM崩溃:http://pastebin.com/dFFx4abC