当前位置:  开发笔记 > 编程语言 > 正文

如何在C中包含和使用cairo图形库?

如何解决《如何在C中包含和使用cairo图形库?》经验,为你挑选了1个好方法。

我最近从项目网站下载并安装了C的Cairo图形库.

我尝试使用网站常见问题解答中的给定代码来运行开罗的hello world程序.在Terminal中,我应用了同一页面给出的相同命令来编译它.但是当我尝试编译它时,出现了未定义引用的错误.

在此输入图像描述

在终端中,输出是:

 cc -o hello $(pkg-config --cflags --libs cairo) hello.c
 /tmp/cco08jEN.o: In function `main':
 hello.c:(.text+0x1f): undefined reference to `cairo_image_surface_create'
 hello.c:(.text+0x2f): undefined reference to `cairo_create'
 hello.c:(.text+0x4e): undefined reference to `cairo_select_font_face'
 hello.c:(.text+0x6d): undefined reference to `cairo_set_font_size'
 hello.c:(.text+0x89): undefined reference to `cairo_set_source_rgb'
 hello.c:(.text+0xbb): undefined reference to `cairo_move_to'
 hello.c:(.text+0xcc): undefined reference to `cairo_show_text'
 hello.c:(.text+0xd8): undefined reference to `cairo_destroy'
 hello.c:(.text+0xe9): undefined reference to `cairo_surface_write_to_png'
 hello.c:(.text+0xf5): undefined reference to `cairo_surface_destroy'
 collect2: error: ld returned 1 exit status

我的源代码是:

#include 

int
main (int argc, char *argv[])
{
    cairo_surface_t *surface =
        cairo_image_surface_create (CAIRO_FORMAT_ARGB32, 240, 80);
    cairo_t *cr =
        cairo_create (surface);

    cairo_select_font_face (cr, "serif", CAIRO_FONT_SLANT_NORMAL, CAIRO_FONT_WEIGHT_BOLD);
    cairo_set_font_size (cr, 32.0);
    cairo_set_source_rgb (cr, 0.0, 0.0, 1.0);
    cairo_move_to (cr, 10.0, 50.0);
    cairo_show_text (cr, "Hello, world");

    cairo_destroy (cr);
    cairo_surface_write_to_png (surface, "hello.png");
    cairo_surface_destroy (surface);
    return 0;
}

如网站常见问题所述.

我是使用终端命令的初学者,而Cairo是我用于图形的第一个第三方库.我试图从互联网上找到任何修复,但我没有得到任何线索也没有修复.

请告诉我我的错误,并向我解释如何使用这些库.



1> Sean Francis..:

改为:

cc hello.c -o hello $(pkg-config --cflags --libs cairo)

让我们从" GCC简介 "一书中引用GNU编译器gcc和g ++.

链接器的传统行为是在命令行中指定的库中从左到右搜索外部函数.这意味着包含函数定义的库应该出现在使用它的任何源文件或目标文件之后.这包括使用快捷方式-l选项指定的库.

鉴于这些信息,做:

cc -o hello $(pkg-config --cflags --libs cairo) hello.c

意味着hello.c无法获得Cairo图形库的函数定义.

另一方面,如果你这样做:

cc hello.c -o hello $(pkg-config --cflags --libs cairo)

意味着hello.c能够获得Cairo图形库的函数定义.请注意,上面的命令相当于cc -o hello hello.c $(pkg-config --cflags --libs cairo).

更多的信息在这里,并在这里.

推荐阅读
135369一生真爱_890
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有