3

出现的错误是针对未定义的符号,而不是我从示例中复制的 Cairo 函数,而是我猜是内部函数。我环顾四周并尝试使用 $(pkg-config --cflags --libs cairo),逐字逐句来自使用终端的常见在线示例。

我在使用 EXPORT=(我的 cairos .ps 文件的路径) 后尝试过。

我目前在链接器设置中的 CodeBlocks 'Link Libraries' 中有一个选项: /usr/lib/x86-linux-gnu/libcairo.a

另外,我/usr/include/cairo的编译器选项中有。

错误:

/usr/lib/x86_64-linux-gnu/libcairo.a(cairo-image-source.o)||In function _cairo_image_source_finish':| (.text+0x1c)||undefined reference topixman_image_unref'|

再加上50个喜欢它。

它们由以下 main.c 生成:

include cairo.h (with # and <>)

int main()
{

    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;
}

任何帮助修复和理解正在发生的事情将不胜感激。谢谢。

4

5 回答 5

2

所以这个问题的解决方案如下:

对所有正确的包含使用 pkg-config。通过添加自动执行此操作:

pkg-config --cflags --libs cairo(在波浪号键上用“`”包围。)

到编译器设置中的“其他选项”选项卡。

我对链接器“其他选项”选项卡做了同样的事情,使用:

pkg-config --libs cairo(也被“`”包围,重音坟墓)

现在我构建和编译没有错误,但是当我运行它时,除了一个空的控制台窗口我什么都看不到:/

于 2013-11-15T21:52:02.643 回答
1

当您使用 png 表面时,您还需要在 pkconfig 行中包含“cairo-png”。尝试

$(pkg-config --cflags --libs cairo cairo-png)

有关 cairo 相关 pkg-config 选项的完整列表,请查看 /usr/lib/pkgconfig。

祝你好运。

阿尔文

于 2013-11-15T03:08:32.933 回答
1

这显然意味着链接器无法找到链接所需的所有引用。具体来说,您的 cairo 库函数依赖于pixman_image_unref哪个库位于不同的库上,并且链接器无法找到该库。您需要包含 pixman 库或任何其他pixman_image_unref可用的库。

于 2013-11-15T04:17:02.907 回答
0

只需使用-lpixman-1。当你给 -L/_path_to_lib/ 添加 -lpixman-1 在最后即

-L/_path_to_lib/ -lpixman-1
于 2015-04-17T11:34:14.430 回答
0

我有同样的问题,我没有 pkg​​-config 就解决了,只是链接到 /usr/lib 下的 libcairo.so。

g++ -L/usr/lib -lcairo hello.o -o hello

我第一次尝试使用 eclipse luna 但没有用,所以我使用自定义 makefile 从终端运行它:

CC=g++
CFLAGS=-c -Wall -I/usr/include/cairo
LDFLAGS=-L/usr/lib -lcairo
SOURCES=hello.c
OBJECTS=$(SOURCES:.c=.o)
EXECUTABLE=hello

all: $(SOURCES) $(EXECUTABLE)

$(EXECUTABLE): $(OBJECTS)
    $(CC) $(LDFLAGS) $(OBJECTS) -o $@

.c.o:
    $(CC) $(CFLAGS) $< -o $@

希望它有更多帮助。

干杯

于 2015-06-10T15:38:10.527 回答