我找不到编译器中指出的函数

时间:2018-10-03 06:41:03

标签: c linux codeblocks raspberry-pi3

我在openvg库上工作。实际上,我曾使用代码块(在树莓上)运行此代码:https://github.com/raspberrypi/firmware/blob/master/opt/vc/src/hello_pi/hello_font/main.c

我获得了渲染颜色,并且看到了锯齿。但是我想使用相同的方法在屏幕上写文本。我分析了这个库:https://github.com/raspberrypi/firmware/blob/master/opt/vc/src/hello_pi/libs/vgfont/vgfont.h并尝试使用<div id="chart" >{!! $chart->script() !!}</div>函数,但是我在新的终端窗口中收到了此消息:

  

断言失败:font.c:176:gx_priv_render_text():已初始化中止

我的编译生成消息如下: enter image description here

Font.c的路径:https://github.com/adafruit/rpi-firmware/blob/master/vc/sdk/opt/vc/src/hello_pi/libs/vgfont/font.c

我在font.c上执行了176行,并尝试调用graphics_resource_render_text_ext()(终端窗口对此行进行了注释。),但是我在任何地方都找不到此功能(我尝试在树莓派中找到)。如果取消gx_font_init()命令,我的代码就很好。为什么不能使用此功能?我的代码如下:

graphics_resource_render_text_ext()

注意::当我取消#include <stdio.h> #include <stdlib.h> #include <unistd.h> #include <assert.h> #include "bcm_host.h" #include "vgfont.h" #include "openvg.h" #include "egl.h" #include "vgu.h" #include "fontinfo.h" #include "shapes.h" #include "eglplatform.h" #include "graphics_x_private.h" int main() { GRAPHICS_RESOURCE_HANDLE img; uint32_t width, height; int LAYER = 1; bcm_host_init(); int s; s = gx_graphics_init("."); assert(s == 0); s = graphics_get_display_size(0, &width, &height); assert(s == 0); s = gx_create_window(0, width, height, GRAPHICS_RESOURCE_RGBA32, &img); assert(s == 0); graphics_resource_fill(img, 0, 0, width, height, GRAPHICS_RGBA32(0, 0, 0, 0x00)); graphics_display_resource(img, 0, LAYER, 0, 0, GRAPHICS_RESOURCE_WIDTH, GRAPHICS_RESOURCE_HEIGHT, VC_DISPMAN_ROT0, 1 ); while(1) { graphics_resource_fill(img, 0, 0,width, height, GRAPHICS_RGBA32(0,0,0,0x55)); graphics_resource_fill(img, 600, 500, 100, 50, GRAPHICS_RGBA32(0,0,0xff,0xaa)); graphics_resource_fill(img, 600, 400, 200, 50, GRAPHICS_RGBA32(0,0xff,0,0xaa)); graphics_resource_render_text_ext( img, 100, 100, 200, 200, GRAPHICS_RGBA32(0xff,0,0,0xdd), GRAPHICS_RGBA32(0, 0xff,0, 0xdd), "hello", strlen("hello"), 20); // This line has problem. graphics_update_displayed_resource(img, 0,0,0,0); } graphics_display_resource(img, 0, LAYER, 0, 0, GRAPHICS_RESOURCE_WIDTH, GRAPHICS_RESOURCE_HEIGHT, VC_DISPMAN_ROT0, 0); graphics_delete_resource(img); printf("Hello world!\n"); return 0; } 时,没有更改编译器生成消息,但是代码运行良好。

1 个答案:

答案 0 :(得分:1)

gx_priv_render_text的{​​{3}}看,由于未设置inited静态变量,因此断言失败。

此变量是通过gx_graphics_init(它是source code)设置的,如果初始化成功,它将调用gx_priv_font_init

因此,初始化在gx_priv_initialise内部某处失败。在该处设置一个断点,并逐步完成该功能,然后还检查日志(该日志应包含在该函数中找到的错误消息之一)。