簡體   English   中英

如何在C中包含和使用cairo圖形庫?

[英]How to include and use cairo graphics library in C?

我最近從項目網站下載並安裝了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 <cairo.h>

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是我用於圖形的第一個第三方庫。 我試圖從互聯網上找到任何修復,但我沒有得到任何線索也沒有修復。

請告訴我我的錯誤,並向我解釋如何使用這些庫。

改為:

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)

更多的信息在這里 ,並在這里

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM