使用gcc,我无法让第三方库Cairo链接/编译

使用gcc,我无法让第三方库Cairo链接/编译,c,gcc,compiler-errors,linker-errors,codeblocks,C,Gcc,Compiler Errors,Linker Errors,Codeblocks,出现的错误是针对未定义的符号,不是我从示例中复制的Cairo函数,而是我猜是内部函数。我环顾四周并尝试使用$(pkg config--cflags--libs cairo),这是一个使用终端的常见在线示例中的逐字逐句 在使用EXPORT=(我到cairos.ps文件的路径)之后,我尝试了这个方法 我目前在链接器设置的代码块“链接库”中有一个选项: /usr/lib/x86 linux gnu/libcairo.a 另外,我的编译器选项中有/usr/include/cairo 错误: /usr/l

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

在使用EXPORT=(我到cairos.ps文件的路径)之后,我尝试了这个方法

我目前在链接器设置的代码块“链接库”中有一个选项:
/usr/lib/x86 linux gnu/libcairo.a

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

错误:

/usr/lib/x86_64-linux-gnu/libcairo.a(cairo image source.o)|函数中的
_cairo_image_source_finish':|
(.text+0x1c)| |未定义对
pixman_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;
}
包括cairo.h(带#和)
int main()
{
开罗曲面=
cairo_图像_曲面_创建(cairo_格式_ARGB32,240,80);
开罗=
cairo_创建(曲面);
cairo\u选择字体\u面(cr,“衬线”,cairo\u字体\u倾斜\u正常,cairo\u字体\u重量\u粗体);
cairo_set_font_size(cr,32.0);
cairo_set_source_rgb(cr,0.0,0.0,1.0);
开罗(cr,10.0,50.0);
开罗秀(cr,“你好,世界”);
开罗大学(cr);
cairo_surface_write___png(surface,“hello.png”);
开罗·表面·破坏(表面);
返回0;
}
任何帮助修复和理解正在发生的事情都将不胜感激。
谢谢。

在使用png曲面时,还需要在pkconfig行中包含“cairo png”。试一试

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

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

祝你好运


Alwin

这显然意味着链接器无法找到链接所需的所有引用。具体来说,cairo库函数依赖于另一个库中的
pixman\u image\u unref
,链接器无法定位此库。您需要包括pixman库或任何其他可用的
pixman\u image\u unref

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

对所有正确的include使用pkg config。自动添加:
pkg config--cflags--libs cairo
(在tilde键上用“`”括起来。)转到编译器设置中我的“其他选项”选项卡

对于链接器的“其他选项”选项卡,我使用:
pkg config--libs cairo
(周围还有“`”,重音坟墓)

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

只需使用-lpixman-1。 当您在末尾将-L/_路径_指定给_lib/add-lpixman-1时,即

-L/_path_to_lib/ -lpixman-1

我也遇到了同样的问题,我在没有pkg配置的情况下解决了这个问题,只是在/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 $@
CC=g++
CFLAGS=-c-Wall-I/usr/include/cairo
LDFLAGS=-L/usr/lib-lcairo
SOURCES=hello.c
对象=$(源:.c=.o)
可执行文件=你好
全部:$(源)$(可执行)
$(可执行文件):$(对象)
$(CC)$(LDFLAGS)$(对象)-o$@
.c.o.:
$(CC)$(CFLAGS)$<-o$@
希望它能帮助更多


干杯

它正在寻找pixman_image_unref函数。显然,cairo依赖于pixman,所以,您也需要链接到该库。看起来pixman没有安装。您是如何安装cairo的?抱歉,没有正确阅读编译器输出。在pkgconfig目录中查找pixman.pc文件(或类似文件;在我的系统上是pixman-1.pc)检查此文件以获得所需的库选项(在我的系统上,它向/usr/lib添加了一个路径,并包括pixman-1库。将此添加到您的code::blocks链接库中。我给了链接器几个新的.a文件,当然,未定义的引用会出现新的错误。我尝试使用
$(pkg config--cflags--clibs cairo)
从命令行执行操作无效。如何使链接器始终使用pkg config?